我正在观看Runar Bjarnason的初学者函数式编程,并在14:45他定义了一个方法:
def isDivisibleBy(k: Int): Int => Boolean = i => i % k == 0
Run Code Online (Sandbox Code Playgroud)
和功能:
val isEven = isDivisibleBy(2)
Run Code Online (Sandbox Code Playgroud)
定义isEven为函数而不是方法的优点和缺点是什么?
我已经阅读了Scala函数与方法以及Scala中方法和函数之间的区别,并且我理解语义差异,但我想知道在这种情况下是否有更深层次的原因为什么函数可能或可能不优于使用方法:
def isEven = isDivisibleBy(2)
Run Code Online (Sandbox Code Playgroud) 这是一个Scala会话,它定义并尝试了一些函数:
scala> def test1(str: String) = str + str;    
test1: (str: String)java.lang.String
scala> test1("ab")
res0: java.lang.String = abab
Run Code Online (Sandbox Code Playgroud)
很好地工作.
scala> val test2 = test1
<console>:6: error: missing arguments for method test1 in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
       val test2 = test1
                   ^
Run Code Online (Sandbox Code Playgroud)
哎呀.
scala> val test2 = test1 _
test2: (String) => java.lang.String = <function1>
scala> test2("ab")
res1: java.lang.String = abab
Run Code Online (Sandbox Code Playgroud)
效果很好!
现在,我已经看到_折叠时的语法(_ + …