Scala中的咖喱函数

最大限度

我对下一个方法有一个定义:

def add1(x: Int, y: Int) = x + y

def add2(x: Int)(y: Int) = x + y

第二个是第一个的咖喱版。然后,如果要部分应用第二个功能,则必须编写val res2 = add2(2) _一切都好。接下来,我要对add1函数进行处理。我写的

val curriedAdd = (add1 _).curried

我可以说curriedAdd与之类似add2吗?但是,当我尝试以curriedAdd这种方式部分申请时val resCurried = curriedAdd(4) _出现编译错误。然后我将其修复为

val resCurried = curriedAdd(4)

为什么a的结果Functions.curried与add function(from add2)的当前版本不同

贾廷

首先curriedAddadd2 _和不是add2add2只是一种方法。

scala> curriedAdd
res52: Int => (Int => Int) = <function1>

scala> add2 _
res53: Int => (Int => Int) = <function1>

关于第二个问题。我认为以下是原因。正在做

scala> val i = curriedAdd(23)
i: Int => Int = <function1>

scala> i _
res54: () => Int => Int = <function0>

scala> curriedAdd(23) _
<console>:10: error: _ must follow method; cannot follow Int => Int
              curriedAdd(23) _

curriedAdd(23) _不起作用。让我们看一下scala手册(第6.7节)-

如果e属于方法类型或e是按名称调用参数,则表达式e _格式正确。如果e是带有参数的方法,则e _表示e通过eta扩展转换为函数类型(第6.26.5节)。如果e是类型=> T的无参数方法或按名称调用参数,则e _表示类型()=> T的函数,当将e应用于空参数列表()时,该函数将求值e。

请记住,它仅评估它是方法还是按名称调用参数。在中curriedAdd(23) _,它不评估curriedAdd(23),但会检查它是否是方法或按名称调用。它既不是方法也不是“按名称呼叫”参数。

它不是按名称的,因为按名称是变量的属性。在评估之后,您会在上面得到一个by-name参数,curriedAdd(23)curriedAdd(23)它本身不是一个by-name变量。因此,该错误(理想情况下,编译器应该已掩盖了该错误)。请注意以下工作:

scala> curriedAdd(23)
res80: Int => Int = <function1>

scala> res80 _
res81: () => Int => Int = <function0>

上面的方法起作用是因为res80 _,这里您要应用_一个按名字呼叫的参数,因此可以进行转换。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Scala函数N元组vs咖喱结果解释

来自分类Dev

收集参数以应用于Java / Scala中的咖喱函数

来自分类Dev

收集参数以应用于Java / Scala中的咖喱函数

来自分类Dev

Scala:将咖喱函数作为参数传递

来自分类Dev

Scala课程“咖喱”

来自分类Dev

SML / NJ中的推翻函数与咖喱函数性能

来自分类Dev

OCaml中咖喱函数的参数采用顺序

来自分类Dev

Scala语法帮助咖喱

来自分类Dev

理解scala:咖喱

来自分类Dev

SWIFT中的咖喱函数

来自分类Dev

在R中的咖喱函数中查找(反向递归?)

来自分类Dev

如何在Scala咖喱函数中绑定第二个参数?

来自分类Dev

Scala中咖喱函数的第n个参数的运算

来自分类Dev

取消JavaScript中n个参数的咖喱函数

来自分类Dev

Scala咖喱函数

来自分类Dev

Scala函数N元组vs咖喱结果解释

来自分类Dev

在F#中推断咖喱函数签名

来自分类Dev

Scala:将咖喱函数作为参数传递

来自分类Dev

Scala课程“咖喱”

来自分类Dev

在scala中咖喱

来自分类Dev

使用Scala IDE在Scala中自动换行长咖喱函数定义

来自分类Dev

理解scala:咖喱

来自分类Dev

Scala:foreach中的咖喱函数?

来自分类Dev

SWIFT中的咖喱函数

来自分类Dev

在R中的咖喱函数中查找(反向递归?)

来自分类Dev

咖喱函数可以消除OCaml中的多态性吗?

来自分类Dev

参数类型的scala中的咖喱

来自分类Dev

如何从javascript中的箭头和咖喱函数获取输出

来自分类Dev

如何在 Haskell 中咖喱函数