的Xquery:传递函数作为参数
问题描述:
我工作的XQuery中的XML项目(使用存在的话),我想知道我怎么能做到以下几点:
我想创建一个功能评价:
评估(的说法,函数)
这里的参数可以是任何东西,应该与函数兼容。
函数是对函数的引用。
一些例子:
评估(6 nextPrime) - > newtPrime(6)= 7
评估( “文本”,toCaps) - > toCaps( “文本”)= TEXT的Xquery:传递函数作为参数
这是什么很在Xquery中可能类似吗?如果是这样,怎么样?
预先感谢您!
答
我不能告诉你存在,但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。
答
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)
};
注意,对于任何数量的参数的一般功能,还可以进行 (但在应用程序并不需要)
在声明的模式,这就是所谓的高阶函数(HOF),并将在XPath/XSLT/XQuery 3.0中发布,这是今天的工作草案。对于当前不存在的函数实例数据类型,您可以使用一些约定,如Dimitre在[FXSL](http://fxsl.sf.net/)中所做的那样。 – 2011-03-24 15:47:47