2011-11-27 26 views
9

我剛開始學習F#。F#。 Tuple與否

我不知道如何確定一個函數的參數是否是一個元組?

let tuple = (1, 2) 
let notTuple = 3 

let isTuple t = // returns 'true' if t is a tuple, 'false' otherwise 

printfn "%b" isTuple tuple  // true 
printfn "%b" isTuple notTuple // false 

回答

11

由於CLR支持運行時類型檢查,所以在技術上可能有這樣做的方法。但你不應該想要做到這一點。它違背了ML家族的多態哲學 - 如果你需要這樣一個檢查,它表明你的算法和/或數據結構設計不適合編程語言。 (例外情況是,如果您需要與不遵循此原則的現有.net庫進行交互)。

更具體地說,參數多態是基於這樣一個概念,即只要你有什麼東西,你不知道它是什麼類型,就是因爲你想要一致地處理所有東西,而不是在數據的內部查看這是什麼。不遵循這個規則相當於對付編程語言的弊端,並且會讓你的代碼更難理解,因爲這些類型不會包含關於你的函數如何處理數據的通常信息。

如果你想創造一些代碼,您可以通過其中一個元組或單個數字,並讓該代碼注意的差別,你應該定義一個明確的變量類型這樣你可以分辨的可能性使用模式匹配,並且它將在它們爲呼叫者提供這種選擇的函數的類型中明確。