在F#中,
根据https://learn.microsoft.com/en-us/dotnet/fsharp/language-reference/keyword-reference,
1. 判别联合(Discriminated Unions) 2. 委托(Delegates) 3. 异常类型(Exception Types)
严格按照文档所述,
- 它不是判别联合语法,因为它缺少管道
因此,尽管它在https://fsharpforfunandprofit.com/posts/conciseness-type-definitions/中广泛使用,但似乎
type X = Y of Z
的意思是什么?具体而言,Y令牌有任何实际目的吗?如果我想表达X是由底层类型Z支持的类型,为什么需要在表达式中使用Y?根据https://learn.microsoft.com/en-us/dotnet/fsharp/language-reference/keyword-reference,
of
关键字用于表示以下一种情况:1. 判别联合(Discriminated Unions) 2. 委托(Delegates) 3. 异常类型(Exception Types)
严格按照文档所述,
type X = Y of Z
不属于上述3个类别之一。- 它不是判别联合语法,因为它缺少管道
|
字符。
- 它不是一个委托,因为缺少委托关键字。
- 它不是异常类型,因为缺少异常类型。因此,尽管它在https://fsharpforfunandprofit.com/posts/conciseness-type-definitions/中广泛使用,但似乎
type X = Y of Z
是无效的语法。这非常令人困惑——文档是否不准确?
Z
不是先前定义的类型,则type X = Z
实际上是一个空 case 的单例 DU。并不是很有用!但是有可能会意外地这样做,例如在type Duration = TimeSpan
的情况下,如果您忘记了open System
。 - TheQuickBrownFox