使用運算子在 F 中進行後期繫結
在像 F#
這樣的靜態型別語言中,我們使用在編譯時熟知的型別。我們使用型別提供程式以型別安全的方式使用外部資料來源。
然而,偶爾需要使用後期繫結(如 C#
中的 dynamic
)。例如,使用沒有明確定義架構的 JSON
文件時。
為了簡化後期繫結的工作,F#
提供了支援動態查詢操作符 ?
和 ?<-
。
例:
// (?) allows us to lookup values in a map like this: map?MyKey
let inline (?) m k = Map.tryFind k m
// (?<-) allows us to update values in a map like this: map?MyKey <- 123
let inline (?<-) m k v = Map.add k v m
let getAndUpdate (map : Map<string, int>) : int option*Map<string, int> =
let i = map?Hello // Equivalent to map |> Map.tryFind "Hello"
let m = map?Hello <- 3 // Equivalent to map |> Map.add "Hello" 3
i, m
事實證明,F#
對後期繫結的支援簡單而靈活。