Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 编译错误,抱怨值不是函数_F#_Compiler Errors_Linqpad - Fatal编程技术网

F# 编译错误,抱怨值不是函数

F# 编译错误,抱怨值不是函数,f#,compiler-errors,linqpad,F#,Compiler Errors,Linqpad,我试图在F#中试验我们需要的一种实用工具,其中我们希望在xml文件的文件夹中搜索特定的标记。如果找到,则插入另一个类似的标签。最后,输出插入了这些附加标记的所有文件名。但是我遇到了一个编译错误,对此我无法理解 let configFile = Directory.GetFiles(Path.Combine("rootdir", "relativepath"), @"*.xml") |> Seq.map(fun configFileName ->

我试图在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")

指出错误位置所在的行/列会有所帮助


乍一看,在nodeAppender中,似乎您在字符串文字上省略了
@
,这意味着它是一行中的五个字符串(而不是一个带转义引号的字符串),这可能是错误的原因。

指出错误位置在哪一行/哪一列会有帮助


乍一看,在nodeAppender中,似乎您在字符串文字上省略了
@
,这意味着它是一行五个字符串(而不是一个带转义引号的字符串),这可能是错误的原因。

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

node.InsertAfter("<Risk type=\"abc1\" methodology=\"xyz1\"/>")
node.InsertAfter(“”)

编辑:显然,我是在布赖恩发布答案的时候输入的。对每个引号字符进行转义或按原样使用
@
作为前缀将起作用。

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

node.InsertAfter("<Risk type=\"abc1\" methodology=\"xyz1\"/>")
node.InsertAfter(“”)


编辑:显然,我是在布赖恩发布答案的时候输入的。要么转义每个引号字符,要么按原样加前缀。

谢谢Daniel!这就是问题所在。我是从那个例子中得到的,字符串的前缀是
@
。但是,我喜欢XML的新的三引号字符串。同意!但不确定三重引号在LinqPad中是否有效。因为我的第一次尝试是用三重引号。可能不是。我怀疑LinqPad是否已更新为与F#3.0配合使用。最近的LinqPad Beta与F#3配合使用(显然您需要安装后者),谢谢Daniel!这就是问题所在。我是从那个例子中得到的,字符串的前缀是
@
。但是,我喜欢XML的新的三引号字符串。同意!但不确定三重引号在LinqPad中是否有效。因为我的第一次尝试是用三重引号。可能不是。我怀疑LinqPad是否已更新为与F#3.0配合使用。最近的LinqPad Beta与F#3配合使用(显然您需要安装后者),您是否在任何地方使用
nodeAppender
node.InsertAfter
在调用
nodeAppender
函数之前不会有任何效果。这是一个很好的观点!!我删除了“let nodeAppender()=”,但似乎不喜欢它。您可以使用
|>ignore
let
声明未使用的值。关键是你应该声明一个值,而不是一个函数。@pad:使用第二个选项会给我一个运行时异常是否在任何地方使用
nodeAppender
node.InsertAfter
在调用
nodeAppender
函数之前不会有任何效果。这是一个很好的观点!!我删除了“let nodeAppender()=”,但似乎不喜欢它。您可以使用
|>ignore
let
声明未使用的值。关键是你应该声明一个值,而不是一个函数。@pad:使用第二个选项会给我一个运行时异常