function – Scala:val foo =(arg:Type)=> {…} vs. def(ar
与
this thread有关
我仍然不清楚这两个定义之间的区别: val foo =(arg:Type)=> {…} 据我了解: 1)val版本在编译时绑定一次 2)def版本在每次调用时都会重新绑定 如果上述情况属实,那么为什么在要执行的操作不依赖于运行时状态的情况下会选择def版本? 例如,在servlet环境中,您可能希望获取连接客户端的IP地址;在这种情况下,您需要使用def作为,当然在编译时没有连接的客户端. 另一方面,你经常在编译时知道要执行的操作,并且可以使用不可变的val foo =(i:Type)=> {…} 根据经验,当存在运行时状态依赖时,是否应该只使用defs? 谢谢你的澄清 解决方法
关于运行时状态依赖的含义,我并不完全清楚. val和def都可以关闭它们的词法范围,因此这种方式是无限的.那么Scala(
has been asked and answered before)中方法(defs)和函数(作为vals)之间有什么区别?
您可以参数化def 例如: object List { def empty[A]: List[A] = Nil //type parameter alllowed here val Empty: List[Nothing] = Nil //cannot create a type parameter } 然后我可以打电话: List.empty[Int] 但我必须使用: List.Empty: List[Int] 但当然还有其他原因.如: def是JVM级别的方法 如果我要使用这段代码: trades filter isEuropean 我可以选择isEuropean的声明: val isEuropean = (_ : Trade).country.region = Europe 要么 def isEuropean(t: Trade) = t.country.region = Europe 后者避免在声明点创建对象(对于函数实例),但不在使用点创建. Scala正在为使用点的方法声明创建一个函数实例.如果我使用_语法更清楚. 但是,在下面的代码中: val b = isEuropean(t) …如果isEuropean被声明为def,则不会创建这样的对象,因此代码可能更高效(如果在非常紧密的循环中使用,其中每个最后纳秒具有临界值) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |