是否可以一起使用元组和类层次结构?
我无法获得一个函数来接受一个抽象类型的元组参数:
[<AbstractClass>]
type XBase () =
member val Name="" with get, set
type X () =
inherit XBase ()
type Y () =
inherit XBase ()
//fine without tuples
let f(values:seq<XBase>) =
printf "ok."
f [new X(); new Y()]
//this function won't work
let f1<'V when 'V :> XBase>(keysAndValues:seq<'V * string>) =
printf "ok."
//compiler error: This expression was expected to have type X but here it has type Y
//f1 [(new X(), ""); (new Y(), "")]
System.Console.ReadLine()
Run Code Online (Sandbox Code Playgroud)
注释序列中的元组不是从同一基类派生的.类型的元组(XBase * string)是不是元组类的基类(X * string)或(Y * string)SO 2种不同类型的这些具体实例不能在集合中放在一起.我认为任何.NET语言(C#,VB)都是如此.
所以你不能创建这个序列:
let tuples = [(new X(), ""); (new Y(), "")]
Run Code Online (Sandbox Code Playgroud)
但您可以使用以下两个序列调用f1函数:
f1 [(new X(), ""); (new X(), "")]
f1 [(new Y(), ""); (new Y(), "")]
Run Code Online (Sandbox Code Playgroud)