【问题标题】:Currying function from an existing answer is invalid现有答案的柯里化功能无效
【发布时间】:2015-05-13 13:10:08
【问题描述】:

我尝试运行以下代码:

val f: (a: Int) => (b: Int) => (c: Int) = a + b + c

在 REPL 和 IntellijIDEA 中的 thread 中找到,但它显然无效。

来自 REPL:

scala> val f: (a: Int) => (b: Int) => (c: Int) = a + b + c
<console>:1: error: ')' expected but ':' found.
       val f: (a: Int) => (b: Int) => (c: Int) = a + b + c
                ^

有人知道为什么吗?我的 scala 版本是 2.10.1

谢谢

【问题讨论】:

    标签: scala


    【解决方案1】:

    你写类型就像你在写一样:

    val a: 5 = 5
    

    你想要的更像

    val f  = (a: Int) => (b: Int) => (c: Int) => a+b+c
    

    为了进一步详细说明,REPL 会写

    f: Int => (Int => (Int => Int)) = <function1>
    

    因为函数定义是右关联的,所以你可以明确地 f 的类型如下

    f: Int => Int => Int => Int = (a: Int) => (b: Int) => (c: Int) => a+b+c
    

    如果你明确地给出这样的函数类型,编译器不需要关于 a、b 和 c 是什么的信息,你可以简单地写成 a => b => c => a+b+c。

    【讨论】:

      猜你喜欢
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 2022-11-22
      • 2021-12-27
      • 2020-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多