Ошибка компиляции с жалобой на то, что значение не является функцией
Я пытаюсь поэкспериментировать в 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 ответа
Ваша строка экранирована неправильно. Так должно быть:
node.InsertAfter("<Risk type=\"abc1\" methodology=\"xyz1\"/>")
РЕДАКТИРОВАТЬ: Очевидно, я печатал это, как Брайан опубликовал свой ответ. Либо экранирование каждого символа котировки, либо префикс с @
как будет работать.
Было бы полезно указать, в какой строке / столбце находится место ошибки.
На первый взгляд, в nodeAppender, похоже, что вы остановились @
на строковом литерале, что означает, что это пять строк подряд (а не одна строка с экранированными кавычками), что может быть причиной ошибки.