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# Seq Seq type作为F中的成员参数#_F#_Sequences_Static Members - Fatal编程技术网

F# Seq Seq type作为F中的成员参数#

F# Seq Seq type作为F中的成员参数#,f#,sequences,static-members,F#,Sequences,Static Members,为什么这个代码不起作用 type Test() = static member func (a: seq<'a seq>) = 5. let a = [[4.]] Test.func(a) 型式试验()= 静态成员func(a:seq错误消息描述了问题——在F#,list中。即使list,类型也不相同,编译器也会给您一个错误 但是,您可以修改func以接受任何类型的序列,只要该类型实现seq>)=5。 设a=[[4.]] Test.func(a)//有效 将代码更改为 typ

为什么这个代码不起作用

type Test() =
  static member func (a: seq<'a seq>) = 5.

let a = [[4.]]
Test.func(a)
型式试验()=

静态成员func(a:seq错误消息描述了问题——在F#,
list
中。即使
list
,类型也不相同,编译器也会给您一个错误

但是,您可以修改
func
以接受任何类型的序列,只要该类型实现
seq>)=5。
设a=[[4.]]
Test.func(a)//有效
将代码更改为

type Test() = 
  static member func (a: seq<#seq<'a>>) = 5. 

let a = [[4.]] 
Test.func(a) 
type Test()=

静态成员func(a:seqseq的子类型,为什么会这样?如果你写“let func(a:seq)我错了。你是对的。你有什么解释为什么‘let func(a:float seq)=5’。我们不必做向上转换,而对于seq seq我们必须这样做?
seq
在F#中是根本不同的类型,即使你(作为程序员)知道任何
'b
都会被转换成
'a
。你必须手动在代码中进行转换;在这种情况下,使用
向上转换
。但是请看我编辑的答案…非常感谢你的帮助。现在我对它有了更多的了解。
let a = [upcast [4.]]
Test.func(a)
type Test() =
  static member func (a: seq<#seq<'a>>) = 5.

let a = [[4.]]
Test.func(a) // works
type Test() = 
  static member func (a: seq<#seq<'a>>) = 5. 

let a = [[4.]] 
Test.func(a)