我找到了一些关于什么是咖喱以及它能做些什么的好帖子.它可以将带有参数列表的函数转换为函数列表.我不清楚它在什么情况下是有用的.谁能给我一个具体的例子?
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>
Run Code Online (Sandbox Code Playgroud)
第一个函数需要3个参数.第二个函数接受一个参数,并返回一个带另一个参数的函数,该函数接受一个int并返回所有三个参数的总和.
为什么这在实践中有用?它有助于创建函数对象而无需编写闭包.考虑一个f(pat, dir)查找与目录中的模式匹配的文件的函数.现在,您希望在列表中存储的多个目录中查找相同的模式dirs.您可以使用
val ff = (f _).curried
dirs.map(ff(pat))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |