我正在Xquery中使用xml项目(使用Exist),我想知道如何实现以下目标:
我想创建一个函数评估:
评估(论证,功能)
这里的论点可以是任何东西,并且应该与函数兼容
function是对函数的引用
一些例子:
评估(6,nextPrime) - > newtPrime(6)= 7
评估(“text”,toCaps) - > toCaps(“text”)= TEXT
Xquery中是否可能存在这种或类似的东西?如果是这样,怎么样?
提前谢谢!
答案 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)
};
请注意,也可以为任意数量的参数创建通用函数 (但申请时不需要)