Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 清单的澄清<';T>;定义语法_F# - Fatal编程技术网

F# 清单的澄清<';T>;定义语法

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

在阅读F#的源代码时,我发现
列表=
|([]):'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