【发布时间】:2012-12-29 01:30:23
【问题描述】:
有没有办法通过反射来判断给定的类型参数是否满足F#比较约束?
我怀疑不是,因为表达式
typedefof<Set<_>>.MakeGenericType [| typeof<System.Type> |]
似乎没有产生任何错误。不过,我还是想听听一些权威的意见。
【问题讨论】:
-
比较约束不是刚刚按照
IComparable实现的吗?即,您不能只查看该类型是否实现了该接口吗? -
即使泛型参数确实实现了
IComparable,也不一定意味着这是由约束强制执行的。换句话说,这必须在泛型参数约束中声明,但情况似乎并非如此。 -
@eirik 你是对的——如果你用 Reflector 查看 FSharpSet
类型的定义,对泛型参数类型没有任何约束(应该有一个约束,它实现 IComparable )。请通过 microsoft.com向fsbugs报告此问题——这似乎是一个F# 编译器错误。 -
@JackP。这是一个怎样的错误?规范是否要求
comparable类型用'T :> IComparable标记? -
@ildjarn 没那么简单。见blogs.msdn.com/b/dsyme/archive/2009/11/08/…
标签: f#