栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

迁移到Scala时要与Java形成的习惯作斗争

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

迁移到Scala时要与Java形成的习惯作斗争

一个明显的例子是不利用scala允许的嵌套作用域,以及延迟副作用(或意识到scala中的所有内容都是表达式):

public InputStream foo(int i) {   final String s = String.valueOf(i);   boolean b = s.length() > 3;   File dir;   if (b) {       dir = new File("C:/tmp");   } else {       dir = new File("/tmp");   }   if (!dir.exists()) dir.mkdirs();   return new FileInputStream(new File(dir, "hello.txt"));}

可以转换为:

def foo(i : Int) : InputStream = {   val s = i.toString   val b = s.length > 3   val dir =      if (b) {       new File("C:/tmp")     } else {       new File("/tmp")     }   if (!dir.exists) dir.mkdirs()   new FileInputStream(new File(dir, "hello.txt"))}

但这可以在很多方面得到改善。它可能是:

def foo(i : Int) = {   def dir = {     def ensuring(d : File) = { if (!d.exists) require(d.mkdirs); d }     def b = {        def s = i.toString       s.length > 3     }     ensuring(new File(if (b) "C:/tmp" else "/tmp"));   }   new FileInputStream(dir, "hello.txt")}

后一个示例不会“导出”超出所需范围的任何变量。事实上,它不声明任何变量 在所有 。这意味着以后更容易重构。当然,这种方法 的确
导致了类文件的巨大膨胀!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/393627.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号