2016-03-03 10 views
6

xdmp:invokeのドキュメントでは、パラメータを2番目の引数として渡すことができます。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

メインモジュールは、呼び出されたコンテキストにアクセスできないメインモジュールを実行し、もう1つは、すべてのコンテキストで関数を実行します。私は、呼び出しをxdmp:invoke-functionへの呼び出しの一部として関数に渡すことができるので、呼び出す配管を通してパラメータを渡す必要はないと考えています。 0-アリティ関数でラップするだけです:

xdmp:invoke-function(
    function() { $fn($a) }, 
    <options>...</options>) 
関連する問題