【问题标题】:What scenario currying is useful in scala?什么场景柯里化在 scala 中有用?
【发布时间】:2015-08-26 08:49:52
【问题描述】:

我发现了一些关于什么是咖喱以及它可以做什么的好帖子。它可以将带有参数列表的函数转换为函数列表。我不清楚这在什么情况下有用。谁能给我一个具体的例子吗?

Scala currying vs partially applied functions

【问题讨论】:

标签: scala currying


【解决方案1】:

Currying 不会将具有参数列表的函数转换为函数列表。它将一个具有多个参数的函数转换为一个接受一个参数的函数,并递归地返回一个接受其余参数的函数。例如:

scala> def f(x: Int, y: Int, z:Int) = x + y + z
ff: (x: Int, y: Int, z: Int)Int

scala> (f _).curried
res4: Int => (Int => (Int => Int)) = <function1>

第一个函数有 3 个参数。第二个函数接受一个参数,并返回一个接受另一个参数的函数,它接受一个 int 并返回所有三个的总和。

为什么这在实践中很有用?它有助于创建函数对象,而无需编写闭包。考虑一个函数f(pat, dir),它在目录中查找与模式匹配的文件。现在您想在列表dirs 中存储的多个目录中查找相同的模式。你可以使用

val ff = (f _).curried
dirs.map(ff(pat))

【讨论】:

    猜你喜欢
    • 2021-04-04
    • 1970-01-01
    • 2015-08-17
    • 2018-01-24
    • 2021-02-07
    相关资源
    最近更新 更多