6
爲什麼...創建委託和Lambda表達式在F#
type IntDelegate = delegate of int -> unit
type ListHelper =
static member ApplyDelegate (l : int list) (d : IntDelegate) =
l |> List.iter (fun x -> d.Invoke x)
ListHelper.ApplyDelegate [1..10] (fun x -> printfn "%d" x)
不能編譯,當:
type IntDelegate = delegate of int -> unit
type ListHelper =
static member ApplyDelegate (l : int list, d : IntDelegate) =
l |> List.iter (fun x -> d.Invoke x)
ListHelper.ApplyDelegate ([1..10], (fun x -> printfn "%d" x))
呢?
唯一的區別是在第二個ApplyDelegate
將其參數作爲元組。
這個函數的參數太多,或者在沒有預期的功能
謝謝。 「成員調用」到底是什麼以及爲什麼有元組參數會有所作爲? 成員應該總是採用tupled參數嗎? – 2010-05-06 18:52:48
「成員」是你用'member'關鍵字定義的東西,例如,某些類型的靜態或實例方法。這些與通過'let f x = ...'或'fun'定義的「函數」形成對比,這些函數相對而言非常嚴格(例如,您不能重載函數,但可以重載成員)。成員們應該總是採取tupled的論據,是的;與特定於F#的函數相比,成員更多的是.NET-y實體。 – Brian 2010-05-06 18:59:57
'tupled arguments'有所不同,因爲當它被元組化時,所有的參數都立刻被傳遞給成員,所以第二個參數是成員的一個參數。在curried參數的情況下,第一個參數是成員的一個參數,並且導致一個新的(非成員)函數值,然後接受第二個參數。 – Brian 2010-05-06 19:03:40