【发布时间】:2012-01-10 00:47:25
【问题描述】:
可能重复:
Applying an argument list to curried function using foldLeft in Scala
考虑:
val f = (i: Int, j: Int, k: Int, l: Int) => i + j + k + l
因为可以做到这一点:
f.curried.apply(1).apply(2).apply(3).apply(4)
尝试这样做很容易掉入陷阱:
List(1, 2, 3, 4).foldLeft(f.curried) { (fs, e) => fs.apply(e) }
但是,一旦向其应用参数,折叠中的B 参数就会改变类型。在此示例中,第一次迭代将从 (Int) => (Int) => (Int) => (Int) => Int 更改为 (Int) => (Int) => (Int) => Int。
问题:如何解决?
【问题讨论】:
-
我认为这没有意义。在
(fs, e) => fs.apply(e)中,您实际上在每次迭代中为fs使用不同的类型,它是不同的apply函数。我不明白它是如何工作的。 -
我认为问题在于这里要查找的内容并不完全清楚。由于您发现的问题,标题中建议的问题 - 折叠 curried 函数 - 永远不会起作用。那么根本问题是什么?将参数列表应用于函数?
-
这已在this question 中讨论过。
-
这是重复的;请投票关闭它。
标签: scala functional-programming