调用咖喱函数

蓝天

以下是curried函数的实现:

scala> def multiply(x: Int, y: Int) = x * y
multiply: (x: Int, y: Int)Int

scala> def multiplyCurried = (multiply _).curried
multiplyCurried: Int => (Int => Int)

当我尝试实现multipliCurried时,我收到异常:

<console>:10: error: missing parameter type
              multiplyCurried(a => b => a * b)

调用multipleCurried的正确实现是什么?

麦克斯

摘自Wikipedia:Currying是一种将对带有多个参数(或参数元组)的函数的求值转换为对函数序列进行求值的技术,每个函数都具有一个参数(部分应用程序)

def multiply(x: Int, y: Int) = x * y          //> multiply: (x: Int, y: Int)Int

def multiplyCurried = (multiply _).curried    //> multiplyCurried: => Int => (Int => Int)

def multiplyCurried2(x: Int)(y: Int) = x * y  //> multiplyCurried2: (x: Int)(y: Int)Int

def multiplyCurried3(x:Int) = (y:Int) => x * y //> multiplyCurried3: (x: Int)Int => Int

def multiplyCurried4 = multiplyCurried2 _ //> multiplyCurried4: => Int => (Int => Int)

multiply(1, 2)                                //> res1: Int = 2
multiplyCurried(1)(2)                         //> res2: Int = 2
multiplyCurried2(1)(2)                        //> res3: Int = 2
multiplyCurried3(1)(2)                        //> res4: Int = 2

multiplyCurried2只是语法糖multiplyCurried3

维克多正确地指出的意见,multiplyCurriedmultiplyCurried2实际上是不一样的。的实现multiplyCurried4包含将配方变成multiplyCurried2基本上等于的功能的配方multiplyCurried

currying的优点是部分应用程序:

val m = multiplyCurried(1)                    //> m  : Int => Int = <function1>
m(2)                                           //> res5: Int = 2
val m2 = multiplyCurried2(1)_                 //> m  : Int => Int = <function1>
m2(2) 

                                    //> res6: Int = 2

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章