這個函式如何回傳“你好”?這里肯定有一些我想念的東西,但我沒有看到
def saySomething(prefix: String) = (s: String) => {
prefix " " s
}
def saySomethingElse = saySomething("hello")
print(saySomethingElse("there"))
我嘗試跟蹤“hello”是如何被前綴替換的,因為它的第一個字串是在函式“saySomething”中傳遞的,但是我不明白“there”是如何附加到結果的。
任何幫助表示贊賞
uj5u.com熱心網友回復:
分解它,它的作業原理是這樣的:
def saySomething(prefix: String) = (s: String) => {
prefix " " s
}
這是一個回傳值的呼叫函式saySomething:
def saySomething(prefix: String) = ???
它回傳的值是一個匿名函式:
(s: String) => { prefix " " s }
每次呼叫 時saySomething(prefix: String),都會創建一個新函式,并且該prefix新函式會記住 的值。因此,當您呼叫saySomething("hello")它時,它會記住"hello"并回傳它。
(s: String) => { "hello" " " s }
def saySomethingElse = (s: String) => { "hello" " " s }
當你呼叫這個新函式時,你會得到最終的字串:
saySomethingElse("there")
// == ((s: String) => { "hello" " " s })("there")
// == "hello" " " "there"
您可以使用不同的值呼叫它并獲得不同的結果:
saySomethingElse("Dolly")
// == ((s: String) => { "hello" " " s })("Dolly")
// == "hello" " " "Dolly"
請注意,saySomethingElse它只能是 aval而不是def。它只是一個包含函式的變數,它不需要是函式本身。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/532732.html
上一篇:按鈕函式呼叫另一個函式
