2016-05-13 67 views
3

爲什麼fn:last()函數在產卵時不起作用?產生函數中的last()

這種失敗:

xquery version "1.0-ml"; 
let $items := (1, 2, 3) 
return xdmp:spawn-function(function() { 
    $items[3 to fn:last()] 
}) 

一段時間後,我取消作業,因爲它什麼都不做。

輸出:取消失敗消息指示功能必須手動停止。

這只是正常:

xquery version "1.0-ml"; 
let $items := (1, 2, 3)[3 to fn:last()] 
return xdmp:spawn-function(function() { 
    $items 
}) 

輸出:查詢成功

+0

「失敗」不是一個真正合理的問題描述。它是如何失敗的,是否有錯誤信息? –

+0

第一個在我的結尾處返回一個XDMP-MEMORY。我認爲值得在MarkLogic支持中提交一個錯誤。需要幫助嗎? – grtjn

+0

在這種情況下,我會報告它。謝謝。 – chriskelly

回答

4

的例子完成的fn:last()的文檔時呈現出非常相似的這一功能的使用。在謂詞中使用函數的缺點是,它們是針對序列中的每個項目進行評估的。使用fn:subsequence和可選fn:count都應該是更有效率,並繞過您的問題:

let $items := (1, 2, 3) 
return xdmp:spawn-function(function() { 
    xdmp:log(subsequence($items, 3, count($items))) (: you can omit 3rd param with same effect :) 
}) 

HTH!

+0

這確實解決了我的問題。無論如何,我會報告它,儘管它是意想不到的行爲。謝謝! – chriskelly