是否有可能有一個函數調用不同記錄類型的相同標籤?例如,假設有兩條記錄,定義如下如何從多個記錄類型訪問相同的標籤?
type Pen = {
Diameter: float
InkColor: string
}
type Pencil = {
Diameter: float
Hardness: int
Blackness: int
}
我可以創建一個函數來訪問任何一種記錄類型的Diameter標籤嗎?現在,如果我定義了一支筆和一支鉛筆,編譯器會對使用哪種記錄類型感到困惑。問題是我不希望編譯器選擇某種類型,如果它選擇了某種類型,則允許使用這兩種類型。這個例子不會編譯,因爲它期望一支鉛筆。
let black_pen = {
Diameter = 0.7
InkColor = "Black"
}
let mechanical_pencil = {
Diameter = 0.5
Hardness = 1
Blackness = 2
}
let getDiameter writing_utility =
let {Diameter = dia} = writing_utility
dia
printf "%A" (getDiameter black_pen)
我現在看到我唯一的選擇是:
- 結合記錄與枚舉類型來告訴它是什麼物體。然後,模式匹配
- 使用類,而不是使用繼承
- 使用動態類型和反射來檢查標籤,並輸入
這將是很好,如果我可以使用泛型這樣的事情:
let getDiameter writing_utility =
let {Diameter<float> = dia} = writing_utility
dia
這是隻要記錄有一個標籤「直徑」,並且是一個浮點數,它將返回值。
非常感謝你的金塊。 – Gorilla3D