在一生中,职能与方法之间还有其他差异。 一般说来,一种简单的方法产生的间接费用低于一种功能(从技术上讲,是一种标有<条码>的物体。
但是,如果你试图不注意这些差异,并想到def
,val
和var,作为fields,有不同的语义词,那么它就只是def
。 每次在<代码>val
时评价一次。
因此,val isEven = isDivisibleBy(2)
, 在其定义期间,应打上isDivisibleBy(2)
,并分配isDivisibleBy(2)
的结果。 缩略语 页: 1
def isDivisibleBy(k: Int): Int => Boolean = i => i % k == 0
<代码>2:,并分配最后表述的结果(在这种情况下只有一种表述):
val isEven: Int => Boolean = i => i % 2 == 0
def isEven
on the other hand does no such evaluation and results in a call to isDivisibleBy(2) every time.
这意味着,在你执行守则时,isEven(11)
在出现<代码>val时产生。
11 % 2 == 0
并且如果是<代码>def,则请注明。
isDivisibleBy(2)(11)
只有在评价<代码>后方可考虑 缩略语 你们的伤势得到了结果。
您可在<条码>中添加一些条码,以便发现差异:
def isDivisibleBy(k: Int): Int => Boolean = {
println("evaluating isDivisibleBy")
i => i % k == 0
}