Scala中的函数与方法
我在看
Runar Bjarnason present Functional Programming for Beginners,在14:45他定义了一个方法:
def isDivisibleBy(k: Int): Int => Boolean = i => i % k == 0 和一个功能: val isEven = isDivisibleBy(2) 将isEven定义为一种功能而不是一种方法的优缺点是什么? 我已经阅读了Scala Functions vs Methods和Difference between method and function in Scala,并且我了解语义差异,但是我想知道在这种情况下是否有更深层次的原因,为什么一个函数可能是也可能不是更好的使用一个方法: def isEven = isDivisibleBy(2) 解决方法
在引擎盖下,功能和方法之间还有其他差异。通常,普通方法比功能(其技术上是具有apply方法的对象)产生的开销更少。
然而,如果您不想关心这些差异,并将def,val和var视为具有不同语义的字段,那么只要在每次调用时都进行def评估,而val仅评估一次。 所以,val isEven = isDivisibleBy(2)在其定义期间应调用isDivisibleBy(2),并分配isDivisibleBy(2)的结果。例如。它取代了k def isDivisibleBy(k: Int): Int => Boolean = i => i % k == 0 与2并分配最终表达式的结果(在这种情况下只有一个表达式): val isEven: Int => Boolean = i => i % 2 == 0 def isEven另一方面没有这样的评估和结果调用isDivisibleBy(2)每次。 这意味着,以后,执行代码时,isEven(11)会在val的情况下生成 11 % 2 == 0 如果def,你会有 isDivisibleBy(2)(11) 只有在评估之后才可以得到结果。 您可以向isDivisibleBy添加一些调试代码来查看差异: def isDivisibleBy(k: Int): Int => Boolean = { println("evaluating isDivisibleBy") i => i % k == 0 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |