我正在尝试定义以下类型:
type lToken =
LInt of int
| LString of string
| LList of lToken list
| LFunction of string * LList
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误'LList'没有定义.
有没有办法做我正在尝试做的事情 - 即使用我在自己的类型定义中定义的类型?
谢谢
正如其他人所指出的,LList它不是一个类型的名称,而只是一个被区分的union的构造函数的名称.在F#中,有区别联合的情况恰好被编译为.NET类型,但这只是一个实现细节,你不能引用生成的类型.
如果你想声明LFunction为包含stringa和a 的强制转换,LList那么你可以扩展定义(如Brian和Marcelo建议的那样)或声明一个新类型(type .. and用于声明递归类型):
type List = Token list
and Token =
| LInt of int
| LString of string
| LList of List
| LFunction of string * List
Run Code Online (Sandbox Code Playgroud)
PS:如果您正在编写F#,那么我建议遵循标准命名准则并使用PascalCase更具描述性的名称来命名."l"代表什么?你可以扩展它(感谢类型推断,你不需要写类型名称).
LList是构造函数,而不是类型.只需直接使用相关类型:
...
| LFunction of string * (lToken list)
Run Code Online (Sandbox Code Playgroud)
(我的ML很生锈;我不确定括号是否正确.)
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |