使用序列中的参数调用函数?

时间:2012-08-10 16:57:37

标签: xquery

是否存在使用从序列中获取的参数调用xquery函数的通用方法?

例如,我可以这样做:

let $dateandtime := (xs:date('2006-08-15'),xs:time('12:30:45-05:00'))
return fn:dateTime($dateandtime[1], $dateandtime[2])

但有没有办法在没有明确指定所有参数的情况下调用fn:dateTime ,而只是提供序列? (我意识到这有限,因为序列不能嵌套。)

以下是我将如何用其他语言完成此操作的示例:

  • python:functionname(*args)
  • javascript:functionname.apply(null, args)
  • php:call_user_func_array('functionname', $args)

1 个答案:

答案 0 :(得分:2)

目前,在XQuery中无法做到这一点。与其他类型语言(如Java)类似,函数签名的分配通常在编译时进行。由于在评估查询之前序列中的项目数可能是未知的,因此在许多情况下,正确的函数签名的静态选择将失败(一般说明:函数可能具有多个函数签名,并且每个签名可能包含不同数量的参数。)

但是,Java提供了反射包来在运行时动态访问和调用函数。 XQuery 3.0的新高阶特性可用于引入另一个apply($f as function(*), $s as item()*)函数。如果您认为这会有所帮助,W3 Issue Tracker可能是请求此类功能的最佳平台。