的F#教程包括下面的代碼片段:匿名的記錄類型內識別聯合
/// A record for a person's first and last name
type Person = {
First : string
Last : string
}
/// define a discriminated union of 3 different kinds of employees
type Employee =
| Engineer of Person
| Manager of Person * list<Employee> // manager has list of reports
| Executive of Person * list<Employee> * Employee // executive also has an assistant
是經理和執行被描述爲元組冒犯了我的感情(我很容易生氣)的事實。它讓我覺得不是非常有表現力。我試圖對其進行修改如下:
/// define a discriminated union of 3 different kinds of employees
type Employee =
| Engineer of Person
| Manager of { Name: Person; Reports: Employee list } // manager has list of reports
| Executive of { Name: Person; Reports: Employee list; Assistant: Employee} // executive also has an assistant
可悲的是,經理和執行的定義現在給出一個錯誤:「該構建過時;考慮使用一個單獨的記錄類型,而不是」。好吧,看起來很公平,我們稱之爲ManagerType。但是請等待... ManagerType引用Employee(對於Reports部分),Employee引用ManagerType(對於Manager選項)。
這裏有解決方案嗎?兩個數據結構是不可能相互定義的?
有趣。我們也可以使用繼承嗎? Executive可以從經理處獲得嗎?或者這隻適用於記錄? –