我对 F# 的“构造类型”语法很好奇。它被记录在这里。
类型参数 通用类型名称
或者
通用类型名称
通过以下示例:
int option
string list
int ref
option<int>
list<string>
ref<int>
Dictionary<int, string>
我很好奇“向后”语法是否有什么特别之处,即参数位于类型之前,或者它是否只是具有一个参数的泛型类型的糖。以下内容有效:
type 'a MyOption = // MyOption<'a> also works
| MySome of 'a
| MyNone
Run Code Online (Sandbox Code Playgroud)
但我无法让它与多个类型参数一起使用。为什么 F# 开发人员更喜欢这种带有一个参数的类型语法?是否有可能或需要让它与两个人一起工作?
向后语法是OCaml 的遗产。就我个人而言,我从不使用它。如果您确实愿意,可以使其与多个类型参数一起使用,如下所示:
type MyMap = (int, string) Map
Run Code Online (Sandbox Code Playgroud)
但是,这会生成一个尖锐的警告(可能很快就会变成错误):
此构造是为了 ML 兼容性。F# 代码中不使用语法“(typ,...,typ) ident”。考虑使用 'ident<typ,...,typ>' 代替。您可以使用“--mlcompatibility”或“--nowarn:62”禁用此警告。
最重要的是,我建议始终使用 .NET 语法:而MyOption<'a>不是'a MyOption.
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |