首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >functional scala:无法编译

functional scala:无法编译
EN

Stack Overflow用户
提问于 2014-06-16 21:18:45
回答 1查看 61关注 0票数 0

我有面向对象的背景,并尝试过一些函数式scala代码作为blow,但为什么有些代码可以编译,而另一个不能:

代码语言:javascript
复制
 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。

EN

回答 1

Stack Overflow用户

发布于 2014-06-16 21:25:50

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

代码语言:javascript
复制
fun1(Int=>Int=>Int)

等同于

代码语言:javascript
复制
fun1(a => a => a)

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

在您的上一个示例中,由于Int不是一个参数,因此它被认为是Int.type,所以您的最后一个示例实际上是:

代码语言:javascript
复制
fun1(_ => _ => Int.type)

因为函数需要返回一个Int,所以这不会进行类型检查,因为Int.typeInt不兼容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24244706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档