2016-03-03 23 views
6

Trong tài liệu cho xdmp:invoke, bạn có thể chuyển tham số làm đối số thứ hai.marklogic gọi hàm với tham số

Đối với xdmp:invoke-function tùy chọn này không khả dụng. Có cách nào để đạt được điều này không?

Lập bản đồ danh sách thành một hàm thật dễ dàng. Những gì tôi đang cố gắng đạt được là một loại chức năng hướng về khía cạnh để kiểm tra những thông điệp nhật ký thành công và thất bại và tiêu chuẩn cho bất kỳ chức năng nào được gọi theo cách này. Một cái gì đó như:

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 :) 
}) 

Có cách nào để đạt được điều này trong XQuery sử dụng MarkLogic không?

Trả lời

9

Một thực thi mô-đun chính không có quyền truy cập vào ngữ cảnh gọi là mô-đun đó và mô-đun kia thực hiện một hàm với tất cả ngữ cảnh đó. Tôi nghĩ rằng ý tưởng là bạn không cần phải vượt qua các thông số thông qua hệ thống ống nước gọi bởi vì bạn có thể chuyển chúng vào chức năng như là một phần của cuộc gọi đến xdmp:invoke-function. Bạn chỉ cần bọc nó trong một hàm 0-arity:

xdmp:invoke-function(
    function() { $fn($a) }, 
    <options>...</options>) 
Các vấn đề liên quan