如何通過專用功能強制創建歧視聯盟價值?如何通過專用功能強制創建歧視聯盟價值?
意圖:
我想依靠創建模式,以產生具有唯一有效的數據結構。
因此,我相信我需要通過使其成爲只讀來限制DU值的使用。然而,我不明白如何實現這一點。
module File1 =
type EmailAddress =
| Valid of string
| Invalid of string
let createEmailAddress (address:System.String) =
if address.Length > 0
then Valid address
else Invalid address
module File2 =
open File1
let validEmail = Valid "" // Shouldn't be allowed
let isValid = createEmailAddress ""
let result = match isValid with
| Valid x -> true
| _ -> false
我嘗試以下:
type EmailAddress =
private
| Valid of string
| Invalid of string
然而,設置的杜類型作爲私人場所執行圖案上創建函數的結果相匹配的能力。
FWIW時,[F#組件設計準則(http://fsharp.org/specs/component-design-guidelines/#do-hide-the-representations-of-record-and-union-types如果這些類型的設計是可能進化的)同樣建議不要暴露DU類型,如果它們必然發展並且僅代表代碼的內部狀態。 –
密切相關,可能重複:http://stackoverflow.com/questions/18539870/how-to-do-argument-validation-of-f-records – Daniel