F# 清单的澄清<';T>;定义语法
在阅读F#的源代码时,我发现F# 清单的澄清<';T>;定义语法,f#,F#,在阅读F#的源代码时,我发现列表= |([]):'T列表 |(:):Head:'T*Tail:'T list->'T list 请有人解释一下上面的语法好吗?编译器警告“此构造已弃用:它仅用于F#library”。语法只是定义有区别的联合的一种旧方法吗?如果是这样,为什么Tail的类型是'T list->'T list而不仅仅是'T list?我相信这意味着: type List<'T> = | ([]) : 'T list
列表=
|([]):'T列表
|(:):Head:'T*Tail:'T list->'T list
请有人解释一下上面的语法好吗?编译器警告“此构造已弃用:它仅用于F#library”。语法只是定义有区别的联合的一种旧方法吗?如果是这样,为什么
Tail
的类型是'T list->'T list
而不仅仅是'T list
?我相信这意味着:
type List<'T> =
| ([]) : 'T list
| (::) : (Head: 'T * Tail: 'T list) -> 'T list
type List'T List
也就是说,(:)
是一个函数,给定一个有序对'T*'T list
生成一个'T list
不推荐使用的构造正在为有区别的联合构造函数提供类型注释。据我所知,在F#的任何版本中,你都不需要这样做。我不知道他们为什么要在图书馆里这样做 这是否也等同于“类型MyListYes,在各个方面都是。只是原则上,(::)是一个函数。好的,谢谢。我制作了一个这样的测试类型:“类型测试=| Case1:int->test | Case2:string->test”。尽管弃用警告仍然存在,但该类型按预期工作。'let test1=Case1(5)“,”让test2=Case2(“test”)”。我想你是对的-警告意味着我们应该使用“Case1 of int”而不是“Case1:int->test”。再次感谢。(:)是一个可以构造列表的函数,也是一个可以在模式匹配期间使用的模式
type List<'T> =
| ([]) : 'T list
| (::) : (Head: 'T * Tail: 'T list) -> 'T list