如何通过专用功能强制创建歧视联盟价值?如何通过专用功能强制创建歧视联盟价值?
意图:
我想依靠创建模式,以产生具有唯一有效的数据结构。
因此,我相信我需要通过使其成为只读来限制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