2016-05-13 34 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