Xquery:将函数作为参数传递

时间:2011-03-24 11:35:28

标签: function-pointers xquery

我正在Xquery中使用xml项目(使用Exist),我想知道如何实现以下目标:
我想创建一个函数评估:
评估(论证,功能)
这里的论点可以是任何东西,并且应该与函数兼容 function是对函数的引用 一些例子:
评估(6,nextPrime) - > newtPrime(6)= 7
评估(“text”,toCaps) - > toCaps(“text”)= TEXT

Xquery中是否可能存在这种或类似的东西?如果是这样,怎么样?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

我无法告诉你存在,但MarkLogic有函数指针:

xquery version "1.0-ml";

declare function local:upper($str)
{
  fn:upper-case($str)
};

let $function := xdmp:function(xs:QName("local:upper"))
return xdmp:apply($function, "blah")

评估此返回BLAH。

答案 1 :(得分:1)

dave是正确的类似支持更高阶函数在Exist中找到。 http://en.wikibooks.org/wiki/XQuery/Higher_Order_Functions 我没有使用存在的机制,因为QName只支持字符串文字,我无法实现我的应用程序所需的动态行为。 相反,我使用了这个技巧:

declare function moviestat:call1($name, $param){
    let $query := concat($name, "($param)")
    return util:eval($query)
}; 

请注意,也可以为任意数量的参数创建通用函数 (但申请时不需要)