我正在開發Coursera的Scala課程的任務並且有一個問題。出於好奇,我已經從一個匿名函數轉換到一個定義:scala中的高階函數奇怪的參數
object sets {
def main(args:Array[String]) {
type Set = Int => Boolean
def contains(s: Set, elem: Int): Boolean = {println("in contains elem ="+elem);s(elem)}
def singletonSet(elem: Int): Set = { //println("in singleton elem ="+elem); (x: Int) => x == elem}
def singletonSetF(x: Int): Boolean = {
println ("in singleton elem ="+elem+", x="+x)
elem == x
}
singletonSetF
}
println(contains(singletonSet(69), 6))
}
}
這裏是輸出:
中包含ELEM = 6
在單ELEM = 69,X = 6
false
我相信代碼是正確的並且正常工作。我的問題是如何以及爲什麼從contains方法傳遞的「elem = 6」參數,在singletonSetF方法中被賦值爲「x = 6」?包含函數調用「(elem)」調用singletonSetF而不是singletonSet?
感謝您的回答。由於我的奴隸剪裁和粘貼原始作業,elem的兩種用法令人困惑。有關閉包的維基百科是一些有趣和實用的例子的另一個很好的資源。 –