为什么在名称调用函数中传递不同的函数类型仍然有效?

时间:2015-06-26 07:25:21

标签: scala

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

任何人都可以解释一下吗?

1 个答案:

答案 0 :(得分:2)

函数定义中的x: => R并不代表function without parameters which returns R,但它意味着an expression which, when evaluated, returns a value of type R而没有指定关于表达式本身的任何其他内容。