我正在尝试定义以下类型:
type lToken =
LInt of int
| LString of string
| LList of lToken list
| LFunction of string * LList
但我收到错误“LList”未定义。
有没有办法做我想做的事情 - 即使用我在他们自己的类型定义中定义的类型?
谢谢
最佳答案
正如其他人指出的那样,LList
不是类型的名称,而只是可区分联合的构造函数的名称。在 F# 中,区分联合的情况恰好被编译为 .NET 类型,但这只是一个实现细节,您不能引用生成的类型。
如果要申报LFunction
作为由 string
组成的类型转换和一个 LList
然后你可以扩展定义(如 Brian 和 Marcelo 所建议的)或声明一个新类型(使用 type .. and
来声明递归类型):
type List = Token list
and Token =
| LInt of int
| LString of string
| LList of List
| LFunction of string * List
PS:如果您正在编写 F#,那么我建议您遵循标准命名指南并使用
PascalCase
为类型名称提供更具描述性的名称。 “我”代表什么?你能扩展它吗(由于类型推断,你不需要写类型名称)。
关于f# - 我可以在它自己的类型定义中使用一个类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4303130/