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:seq和seq的子类型,为什么会这样?如果你写“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)