我是斯卡拉新手,我剛剛遇到了一個我希望有人能解釋我的情況。斯卡拉 - 共享第二個參數列表的兩個函數
在觀看馬丁·奧德斯基的過程中,我發現下面的腳本,他用來解釋它返回一個函數
val tolerance = 0.0001
def isCloseEnough(x : Double, y : Double) = abs((x - y)/ x)/x < tolerance
def fixedPoint(f : Double => Double)(firstGuess: Double) = {
def iterate(guess: Double): Double = {
val next = f(guess)
if(isCloseEnough(guess,next))next
else iterate(next)
}
iterate(firstGuess)
}
fixedPoint(x => 1 + x/2)(1)
def averageDamp(f: Double => Double)(x: Double) = (x + f(x))/2
def sqrt(x : Double) = fixedPoint(averageDamp(y => x/y))(1)
sqrt(2)
我完全理解如何紙條作品的功能,但我沒想到這行:
定點(averageDamp(Y => X/Y))(1)
我知道,多虧柯里,斯卡拉讓我們寫幾個參數列表功能。所以對fixedPoint的呼叫作爲參數傳遞給avergaDamp的結果,並且(1)對我很明顯。
我不明白的是averageDamp如何使用的第二個參數列表定點時,它本身就是第一個參數列表中。我雖然這將是一個不同的範圍,因此我期待類似:
定點(averageDamp(Y => X/Y)(1))(1)
什麼是Scala中的屬性這使我們能夠以這種方式實現咖喱?是類似於隱式應用於參數列表?
感謝您的時間
感謝您的反饋 –