scala函数定义

clipboard.png
问下这个uncurried函数中怎么理解呢??

阅读 3.1k
2 个回答

就是柯里化反过来,原本的函数f的类型是A1 => (A2 => B),经过反柯里化:

g = Function.uncurried(f)

那么g的类型是(A1, A2) => B

这是函数式编程里面常见的概念。

在使用f和g的时候,有如下区别:

(f (x1)) (x2) 等价于 g (x1, x2)

  1. 返回类型 (A1, A2)=> B, 说明返回类型是一个函数,接收A1、A2类型的参数,返回值类型为B;
  2. 参数 f:(A1)=>(A2)=>B,表明f是一个有两个参数列表的函数,每个参数列表分别有一个参数。第一个参数列表接收类型为A1的参数,第二个参数列表接受类型为A2的参数,返回值类型为B
  3. ...= (x1, x2) => f(x1)(x2) 等号右边整体是一个匿名函数,作为返回值返回。这个匿名函数参数为x1,x2,函数体为f(x1)(x2)。因为前面已经说明了uncurried函数的返回值类型,也就是说明了这个函数的参数类型和返回值类型,所以可以参数列表类型可以省略。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进