产生函数

时间:2016-05-13 08:12:18

标签: xquery marklogic marklogic-8

为什么fn: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
}) 
  

输出:查询已成功完成

1 个答案:

答案 0 :(得分: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!