我工作的XQuery中的XML項目(使用存在的話),我想知道我怎麼能做到以下幾點:
我想創建一個功能評價:
評估(的說法,函數)
這裏的參數可以是任何東西,應該與函數兼容。
函數是對函數的引用。
一些例子:
評估(6 nextPrime) - > newtPrime(6)= 7
評估( 「文本」,toCaps) - > toCaps( 「文本」)= TEXT的Xquery:傳遞函數作爲參數
這是什麼很在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