功能scala:无法编译

时间:2014-06-16 13:18:45

标签: scala

我有OO背景并尝试了一些功能性scala代码,但为什么有些编译时却没有:

 def fun(a: Int => Int) = a(1)

  def fun1(f: => Int => Int => Int) = {
    fun { a => fun { b => f(a)(b) } }
  }

  fun1(Int=>Int=>Int)   // it compiles but what's Int=>Int=>Int? it only define type, but no param name, how it work without compile error?
  fun1(Int=>Int=>1)  
  fun1(a=>b=>a+b)
  fun1(a=>b=>Int)  // why this has compile error while other doesn't, such as fun1(Int=>Int=>1?

请同时帮助我理解前2个电话的价值为1但第三个电话的结果是2。

1 个答案:

答案 0 :(得分:3)

在前两个示例中,Int只是参数的名称,因此:

fun1(Int=>Int=>Int)

相同
fun1(a => a => a)

其中外部参数被内部函数的参数遮蔽。

在上一个示例中,由于Int不是参数,因此它被视为Int.type,因此您的最后一个示例是有效的:

fun1(_ => _ => Int.type)

由于该函数需要返回Int,因此Int.typeInt不兼容,因此不会进行类型检查。