2011-03-24 215 views
1

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

這是什麼很在Xquery中可能類似嗎?如果是這樣,怎麼樣?

預先感謝您!

+3

在聲明的模式,這就是所謂的高階函數(HOF),並將在XPath/XSLT/XQuery 3.0中發佈,這是今天的工作草案。對於當前不存在的函數實例數據類型,您可以使用一些約定,如Dimitre在[FXSL](http://fxsl.sf.net/)中所做的那樣。 – 2011-03-24 15:47:47

回答

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

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

注意,對於任何數量的參數的一般功能,還可以進行 (但在應用程序並不需要)