这段代码:
open System
open System.Collections.Generic
type INode =
interface
inherit IEqualityComparer<INode>
inherit IEquatable<INode>
end
let myFun<'N when 'N :> INode> (n:'N) = n = n
生成以下构建错误:
A type parameter is missing a constraint 'when 'N : equality'
我知道我可以在函数级别安抚编译器
let myFun<'N when 'N :> INode and 'N : equality> (n:'N) = n = n
但我更愿意让类型约束保持在 myFun
中,并在 INode
中“修复”问题,以便在我遇到问题时更容易希望多个函数具有相同的约束。
可能吗?
最佳答案
您不需要 <>
内的位删除后问题就会消失:
open System
open System.Collections.Generic
type INode =
interface
inherit IEqualityComparer<INode>
inherit IEquatable<INode>
end
let myFun (n:'N when 'N :> INode) = n = n
一个更简单的版本(来自@ben)是使用可向下转换的类型的简写,如下所示:
let myFun (n: #INode) = n = n
关于.net - 修复了 "A type parameter is missing a constraint ' 时非常可怕的 'N : equality'“错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21517511/