缺少的方法应用程序应该用括号括起来

Missing method applications should be parenthesized

我读了 xml 文件,想比较属性值。

let xname name = XName.Get name
let xattr (elem: XElement) (name:string) = elem.Attribute(xname name).Value

let loc (filename:string) (location:string) = 
    query {
        for doc in XDocument.Load(filename).Descendants(xname location) do
        where (xattr doc "name").isEqual(location)
        select doc
    }

在线 where (xattr doc "name").isEqual(location) 编译器抱怨

Successive arguments should be separated by spaces or tupled, and arguments involving function or method applications should be parenthesized

我做错了什么?

好吧,编译器会准确地告诉您需要做什么。

在这种情况下,请遵循第二个提示:带括号的

重写表达式:

(xattr doc "name").isEqual(location)

作为

((xattr doc "name").isEqual(location))

你可能想知道他为什么要我这样做?原因是因为他不知道一个论点是只有一个论点还是有更多的论点。

例如考虑这个函数调用:

function1 arg1 ()

它是两个参数,但是如果 arg1 是一个没有参数的函数并且你想调用它,它应该是:

function1 (arg1 ())