【问题标题】:What are the applications/advantages of using partially applied functions in scala?在 scala 中使用部分应用函数的应用程序/优点是什么?
【发布时间】:2010-12-25 18:00:48
【问题描述】:

我们在Scala中部分应用了函数-

def sum(a:Int,b:Int,c:Int) = a+b+c

val partial1 = sum(1,_:Int,8)

我想知道使用部分应用函数有什么好处。还是只是句法上的补充?

【问题讨论】:

    标签: scala partial-application


    【解决方案1】:

    关于一般的部分应用函数,“Programming in Scala, 2nd edition”一书中提到:

    考虑这种表达方式的另一种方式,其中下划线 用于表示整个参数列表,是作为一种转换 def 转换成函数值
    例如,如果您有一个本地函数,例如sum(a: Int, b: Int, c: Int): Int,您可以将其“包装”在一个函数值中,该函数值的 apply 方法具有相同的参数列表和结果类型。

    scala> def sum(a: Int, b: Int, c: Int) = a + b + c
    sum: (a: Int,b: Int,c: Int)Int
    scala> val a = sum _
    a: (Int, Int, Int) => Int = <function3>
    

    (这里,a(1, 2, 3) 是以下的简写形式:

    scala> a.apply(1, 2, 3)
    res12: Int = 6
    

    )

    虽然您不能将方法或嵌套函数分配给变量,或者将其作为参数传递给另一个函数,但如果您将方法或嵌套函数包装在函数值中,则可以通过放置名称后加下划线。

    【讨论】:

    • 是的,所以我看到我们可以创建一个函数值并像任何其他变量一样传递。非常感谢:)
    【解决方案2】:

    优点是sum(1,_,8)x =&gt; sum(1,x,8) 更少打字和阅读。

    仅此而已。

    【讨论】:

      【解决方案3】:

      sum(1,_,8) 比 x => sum(1,x,8) 更容易输入和读取

      但是,两者都不合法;您必须提供参数类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-12
        • 1970-01-01
        • 2012-06-19
        • 2019-06-19
        • 2013-11-13
        • 1970-01-01
        相关资源
        最近更新 更多