2015-06-25 106 views
0

以下代碼正確輸出true或false,具體取決於字符串是否包含元音。這是使用匿名函數,閉包的簡寫格式,拍攝的變量等將內聯匿名函數解析爲命名函數

let s = "hello" 
println(contains(s,{contains("aeiou",$0)})) 

我試圖解開它與明確的參數

let s = "hello" 
func myFunction(c: Character)->Bool { 
    return contains(s,c) 
} 

println(contains(s,myFunction(???)) 

什麼是適當功能的單獨命名的函數定義和隨後的呼叫?

回答

0

我相信@stklieme沒有解決的任擇議定書的問題上封閉,因爲代碼以相反的順序傳遞參數。使用外部函數調用匿名閉包要求您在閉包中命名參數,如下所示:

let s = "hello" 

//println(contains(s, {contains("aeiou",$0)})) 

func myFunction(c: Character) -> Bool { 
    return contains("aeiou", c) 
} 

println(contains(s, { (c: Character) -> Bool in return myFunction(c) })) 
-1

,你可以使用一個「傳統」功能傳遞兩個參數

func myFunction(c: Character, string : String) -> Bool 
{ 
    return contains(s,c) 
} 

println(myFunction("f", "Hello")) // false 

或可以捕捉到字符串參數

let s = "hello" 
var myClosureFunction = { (c: Character) -> Bool in 
    return contains(s,c) 
} 

println(myClosureFunction("o")) // true