在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'不能既是方法调用又是函数分配。像大多数事情一样,这是一种折衷。设计人员虽然省略括号会更有用,因为它会比将函数分配给方法更多。 –