2016-03-03 2 views
6

В документации для xdmp:invoke можно передать параметры в качестве второго аргумента.Функция marklogic 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 :) 
}) 

Есть ли способ достичь этого в XQuery с помощью MarkLogic?

ответ

9

Один из них выполняет основной модуль без доступа к контексту, который его вызвал, а другой выполняет функцию со всем этим контекстом. Я думаю, что идея состоит в том, что вам не нужно передавать параметры через invoke plumbing, потому что вы можете передать их функции в качестве части вызова xdmp:invoke-function. Вам просто нужно обернуть его функцией 0-arity:

xdmp:invoke-function(
    function() { $fn($a) }, 
    <options>...</options>) 
Смежные вопросы