0
所以我根據我讀過我已經得到這種形式討好下來:我該如何在斯卡拉咖喱這個功能?
def arithmetic_iter(op: (Int, Int) => Int, f: Int => Int, base: Int)(a: Int, b: Int): Int = {
def iter(a: Int, base: Int): Int =
if (a > b) base
else iter(a + 1, op(base, f(a)))
iter(a, base)
}
然而,我想要做這樣的事情:
def route(m:Message) = {
(e: Endpoint) => e.send(m)
}
通過上面的功能。所以我想出了這個數字:
def arithmetic_iter_lambda(op: (Int, Int) => Int, f: Int => Int, base: Int)(a: Int, b: Int): Int = {
(a: Int, b: Int) =>
Int = {
def iter(a: Int, base: Int): Int =
if (a > b) base
else iter(a + 1, op(base, f(a)))
iter(a, base)
}
}
不幸的是,我得到一個錯誤,說:重新分配給val。
所以我堅持如何修復arithmetic_iter_lambda。
其中,我甚至沒有意識到我在_iter函數上留下了(a,b)。感謝您的支持。二,所以我看到我沒有告訴我的外部函數,它會返回一個函數,[需要兩個Int並返回一個Int]。我現在明白我的錯誤。謝謝Shadowlands。 – dotnetN00b
很高興我可以幫忙(並且rep的提升總是一個很好的謝謝你;)。實際上,在這種情況下,您可以關閉':(Int,Int)=> Int'結果類型說明,編譯器可以推斷出正確的結果類型,但我認爲它通常更有用(良好的自文檔代碼)讓它繼續 - 特別是如果你(或者其他讀取代碼的人)對Scala或這個習慣用法是新的。 – Shadowlands