在Python我可以這樣做:功能分配到值/變量斯卡拉
In [24]: def m1():
....: return "I am legend"
....:
In [25]: f1 = m1
In [26]: type(f1)
Out[26]: function
In [27]: type(m1)
Out[27]: function
而在Scala中,
def m1() = "I am legend"
的就是我上面做的相當的不
val f1 = m1
但我反而必須指定
scala> val f1:()=> String = m1
f1:() => String = <function0>
或
scala> val f1 = m1 _
f1:() => String = <function0>
爲什麼這個設計選擇做? 正如有人來斯卡拉從Python中,能夠通過
val f1 = m1
分配的功能似乎比不必做上述方法中的一個更自然。
我知道val f1 = m1
結果m1
被調用,並將所得值分配給f1
但不會是一直更加清晰遵循了Python方法 ,需要在這種情況下,括號,而不是即
val f1 = m1()
在我希望調用函數並將結果分配給f1
的情況下?
這是一個設計選擇。允許arity-0的方法省略括號意味着'val f1 = m1'不能既是方法調用又是函數分配。像大多數事情一樣,這是一種折衷。設計人員雖然省略括號會更有用,因爲它會比將函數分配給方法更多。 –