【问题标题】:Order of Arguments in Curried Scala FunctionsCurried Scala 函数中的参数顺序
【发布时间】:2013-08-30 03:19:22
【问题描述】:

在 Scala 中,我可以像这样生成一个柯里化函数:

def multiply(m: Int)(n: Int): Int = (m + 1) * (n + 2)

如果我愿意,我可以通过填充第一个参数来生成一个新函数,如下所示:

val timesTwo = multiply(1) _

但是替换第二个参数而不是第一个参数的语法是什么?

val timesThree = multiply _ (1)  // Incorrect Syntax

更重要的是,为什么没有直接平行于multiply(1) _

【问题讨论】:

    标签: scala currying


    【解决方案1】:
    val timesThree = multiply(_: Int)(1)
    

    val timesThree = (x: Int) => multiply(x)(1)
    

    【讨论】:

    • 我喜欢multiply(_: Int)(1)。谢谢!但为什么语法与multiply(1) _ 不平行?
    • 参见 Scala 参考 (scala-lang.org/files/archive/nightly/pdfs/ScalaReference.pdf) 的第 6.7 节。 multiply(1) _ 中的 _ 不是匿名函数参数的占位符,就像在 `multiply(_: Int) 中那样,而是一种强制将方法转换为函数的特殊语法(“eta-expansion”)。至于为什么需要显式类型,我不知道。
    猜你喜欢
    • 1970-01-01
    • 2017-10-05
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多