抱怨值不是函数的编译错误

时间:2012-07-11 15:27:06

标签: f# compiler-errors linqpad

我正在尝试在F#中试验我们需要的其中一个实用工具,其中我们想要浏览xml文件的文件夹并查找特定标记。如果找到,则随之插入另一个类似的标签。最后,输出已插入此类附加标记的所有文件名。但是我遇到了编译错误,我无法理解这一点。

let configFile = 
    Directory.GetFiles(Path.Combine("rootdir", "relativepath"), @"*.xml")    
    |> Seq.map(fun configFileName -> 
                let xmlNavigator = XPathDocument(configFileName).CreateNavigator()
                let node = xmlNavigator.SelectSingleNode(@"Product/ABc[@type='xyz']")
                match node with
                | null -> "not configuration present"
                | _ -> 
                    let nodeAppender() = node.InsertAfter("<Risk type=""abc1"" methodology=""xyz1""/>")
                    let parentNode = node.SelectAncestors(XPathNodeType.Root, false)
                    parentNode.Current.OuterXml)        
    |> Seq.iter (printfn "%s")

编译错误如下:

This value is not a function and cannot be applied

2 个答案:

答案 0 :(得分:2)

您的字符串未正确转义。它应该是:

node.InsertAfter("<Risk type=\"abc1\" methodology=\"xyz1\"/>")
编辑:显然我正在键入这个,因为Brian发布了他的答案。无论是转义每个引用字符还是以@为前缀都可以正常工作。

答案 1 :(得分:1)

有助于指出错误位置所在的行/列。

乍一看,在nodeAppender中,它看起来就像你在字符串文字上的@一样,这意味着它连续五个字符串(而不是一个带有转义引号的字符串),这可能是错误的原因。