1
我發現名稱參數和功能非常相似。第一個與第二個的優勢是什麼?名稱參數或功能?
object ws1 {
def myByFunc(f:() => Int) = f() //> myByFunc: (f:() => Int)Int
def myByName(f: => Int) = f //> myByName: (f: => Int)Int
def testFunc(a: Int) = a * a //> testFunc: (a: Int)Int
myByFunc(() => testFunc(123)) //> res0: Int = 15129
myByName(testFunc(123)) //> res1: Int = 15129
}
UPDATE: 至於有多少次,每次他們的執行問題:
object ws1 {
def myByFunc(f:() => Int) = {
println("111111111 myByFunc")
f()
} //> myByFunc: (f:() => Int)Int
def myByName(f: => Int) = {
println("22222222 myByName")
f
} //> myByName: (f: => Int)Int
def testFunc(a: Int) = a * a //> testFunc: (a: Int)Int
myByFunc(() => testFunc(123)) //> 111111111 myByFunc
//| res0: Int = 15129
myByName(testFunc(123)) //> 22222222 myByName
//| res1: Int = 15129
}
出於某種原因,他們都執行1次。爲什麼?
UPDATE2: 他們都不評估:
object ws1 {
def myByFunc(f:() => Int) = {
println("111111111 myByFunc")
} //> myByFunc: (f:() => Int)Unit
def myByName(f: => Int) = {
println("22222222 myByName")
} //> myByName: (f: => Int)Unit
def testFunc(a: Int) = {
println("hello from test func")
123456
} //> testFunc: (a: Int)Int
myByFunc(() => testFunc(123)) //> 111111111 myByFunc
myByName(testFunc(123)) //> 22222222 myByName
}
不是'()=> Int'懶惰?將不會執行'()=> Int'幾次? –
'()=> Int'不是懶惰的,它是一個按值調用。該值將首先計算並傳遞給'myByFunc' –
第二個問題呢? –