【问题标题】:Why passing different function types in called-by-name function still work?为什么在按名称调用的函数中传递不同的函数类型仍然有效?
【发布时间】:2015-06-28 17:20:34
【问题描述】:

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

谁能解释一下?

【问题讨论】:

  • 您能否发布一个当参数类型为=&gt;R 时接受R =&gt; R 的代码示例?
  • @DidierDupont:添加示例,谢谢!

标签: scala


【解决方案1】:

函数定义中的x: =&gt; R 不代表function without parameters which returns R,而是表示an expression which, when evaluated, returns a value of type R,而没有指定表达式本身的任何其他内容。

【讨论】:

  • 能否提供参考链接供您参考?
  • 其实你们都对。在内部,表达式将被转换为函数,因此被调用函数f 接收作为参数的无参数函数x 返回R
猜你喜欢
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
  • 1970-01-01
相关资源
最近更新 更多