marklogic使用参数调用函数

时间:2016-03-03 21:55:54

标签: xquery marklogic

xdmp:invoke的文档中,可以将参数作为第二个参数传递。

对于xdmp:invoke-function,此选项不可用。有没有解决方法来实现这一目标?

将列表映射到函数很容易。我想要实现的是一种面向方面的功能,它检查成功和失败的内容以及以这种方式调用的任何函数的标准日志消息。类似的东西:

declare function my-mapper ($array, $fn) {
    (: standard logging and checks :)

    for $a in $array
    return try {
        (: now call the function with parameter :)
        xdmp:invoke-function($fn($a),<options>...</options>)

    } catch ($e) {
        (: standard housekeeping if something goes wrong :)      
        ...
    }
})


my-mapper($array, function ($item) {
     (: do stuff with item :)
})

有没有办法在使用MarkLogic的XQuery中实现这一目标?

1 个答案:

答案 0 :(得分:9)

一个执行主模块,不能访问调用它的上下文,另一个执行具有所有上下文的函数。我认为这个想法是你不需要通过调用管道传递参数,因为你可以将它们作为调用xdmp:invoke-function的一部分传递给函数。你只需要将它包装在0-arity函数中:

xdmp:invoke-function(
  function () { $fn($a) },
  <options>...</options>)