5
let f (O: obj) =
match O with
| :? (obj -> list<obj>) -> "win"
| :? list<obj> -> "list!"
| _ -> "fail"
Console.WriteLine(f(fun x -> ["lol"]))
Console.WriteLine(f(["lol"]))
打印“失败”两次,我想它应该,因为我给我一个功能obj -> list<String>
,这不是obj -> list<obj>
。有什么方法可以让它们匹配吗?在匿名函数出来之前,我可以将每个列表上传到list<obj>
,或者在把它放入列表之前,我可以将所有内容上传到obj
。F#模式匹配:匹配函数/子类型列表?
这些作品中的任何一个都可以匹配,但我认为这是协变/逆变意味着已经解决的问题?纠正我,如果我错了
F#不支持co/contravariance。 – Daniel