我的问题与这个问题有些相关 - 具有通用参数类型的函数,但我无法弄清楚如何做我想要的事情。
我想定义一个“后代函数”来包装对各种 C# 类的“Descendants”调用,如下所示:
我认为可以利用内联函数和静态解析参数来定义以下方法来实现这一点:
我想定义一个“后代函数”来包装对各种 C# 类的“Descendants”调用,如下所示:
let descendants name (xDocument:XDocument) = xDocument.Descendants name
let descendants name (xElement:XElement) = xElement.Descendants name
这种方法行不通,因为我们有一个重复定义的“descendants”。我认为可以利用内联函数和静态解析参数来定义以下方法来实现这一点:
let inline descendants name (xml : ^x when ^x : (member Descendants : XName -> seq<XElement>)) =
xml.Descendants name
但是,当我尝试这样做时,出现了以下错误:
在此程序点之前基于不确定类型的对象进行查找。可能需要在此程序点之前添加类型注释以约束对象的类型。这可能允许查找得到解决。
有没有办法编写第二个函数以实现我的目标?
[<OverloadID("SomeName")>]
,但我不确定从哪个版本开始就已经删除了... 我只是在 F# RC 中尝试了更简单的示例(两种方法,每种方法都有两个参数),并且它可以正常工作(无需OverloadID
)。 - Tomas Petricek