【问题标题】:Scala, Composing Function with two valuesScala,用两个值组合函数
【发布时间】:2016-12-31 21:46:37
【问题描述】:
def adder(a:Int,b:Int):Int = {a+b}
def doubler(a:Int):Int = {a*2}
def doubleAdd = doubler _ compose adder

我收到错误:类型不匹配 找到:(Int,Int)=>Int 必需的: ? => 诠释

如果我只是尝试 d​​oubleAdd = doubler(adder _) 我会得到相同的错误,除了 required Int 而不是 ? => 诠释

有没有办法用两个参数组成一个函数?抱歉,如果这是非常基本的,我对这门语言还很陌生,而且我在任何地方都找不到带有两个参数的示例。

【问题讨论】:

    标签: scala


    【解决方案1】:

    您正在尝试用 Function1 组合 Function2(加法器),因此出现了问题。一种解决方法是将 Adder 的定义更改为 curried 版本:

    def adder(a: Int)(b: Int):Int = a + b
    

    然后 doubleAdd 部分应用加法器,如下所示:

    def doubleAdd(x: Int) = doubler _ compose adder(x)
    

    幕后发生的事情是将加法器从 Function2 (Int, Int) => Int 转换为 Function1 (Int) => (Int) => Int 或返回函数的函数。然后,您可以使用已应用的第一个参数组合从 adder 返回的函数。

    【讨论】:

      猜你喜欢
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-16
      • 1970-01-01
      相关资源
      最近更新 更多