2012-01-09 89 views
1

可能重复:
Applying an argument list to curried function using foldLeft in ScalaScala的折叠式咖喱功能

考虑:

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

问题:如何解决这个问题?

+1

我不认为这是有道理的。在'(fs,e)=> fs.apply(e)''你实际上在每次迭代时对'fs'使用了一个不同的类型,它是一个不同的'apply'函数。我不明白它是如何工作的。 – Gabe 2012-01-09 16:29:18

+1

我认为问题在于不清楚在这里寻找什么。标题中提出的问题 - 折叠咖喱函数 - 由于您确定的问题而无法正常工作。那么底层的问题是什么?将参数列表应用于函数? – Submonoid 2012-01-09 16:34:46

+7

这是在[这个问题]讨论(http://stackoverflow.com/questions/7606587/applying-an-argument-list-to-curried-function-using-foldleft-in-scala)。 – hbatista 2012-01-09 16:35:01

回答