在Scala
中,定义一个按名称调用其参数的函数是这样的:
def f(x: => R)
我认为=> R
表示参数为空且返回值类型为R
的函数。但是,当我将类型不是=> R
的函数传递给f
时,例如R => R
,我发现它仍然有效。这个例子是这样的:
scala> def foo(code: => Int) {
| println(code)
| }
foo: (code: => Int)Unit
scala> val bar: () => Int = () => 1
bar: () => Int = <function0>
scala> foo(bar())
1
scala> val bar1: Int => Int = myInt => 2
bar1: Int => Int = <function1>
scala> foo(bar1(2))
2
任何人都可以解释一下吗?
答案 0 :(得分:2)
函数定义中的x: => R
并不代表function without parameters which returns R
,但它意味着an expression which, when evaluated, returns a value of type R
而没有指定关于表达式本身的任何其他内容。