2016-03-03 83 views
6

xdmp:invoke的文檔中,可以將參數作爲第二個參數傳遞。帶參數的marklogic調用函數

對於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中實現這一點嗎?

回答

9

一個執行主模塊,不訪問調用它的上下文,另一個執行一個包含所有上下文的函數。我認爲這個想法是,您不需要通過調用管道傳遞參數,因爲您可以將它們作爲調用xdmp:invoke-function的一部分傳遞給函數。您只需要將其包裝在0值函數中:

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