是否存在使用从序列中获取的参数调用xquery函数的通用方法?
例如,我可以这样做:
let $dateandtime := (xs:date('2006-08-15'),xs:time('12:30:45-05:00'))
return fn:dateTime($dateandtime[1], $dateandtime[2])
但有没有办法在没有明确指定所有参数的情况下调用fn:dateTime
,而只是提供序列? (我意识到这有限,因为序列不能嵌套。)
以下是我将如何用其他语言完成此操作的示例:
functionname(*args)
functionname.apply(null, args)
call_user_func_array('functionname', $args)
答案 0 :(得分:2)
目前,在XQuery中无法做到这一点。与其他类型语言(如Java)类似,函数签名的分配通常在编译时进行。由于在评估查询之前序列中的项目数可能是未知的,因此在许多情况下,正确的函数签名的静态选择将失败(一般说明:函数可能具有多个函数签名,并且每个签名可能包含不同数量的参数。)
但是,Java提供了反射包来在运行时动态访问和调用函数。 XQuery 3.0的新高阶特性可用于引入另一个apply($f as function(*), $s as item()*)
函数。如果您认为这会有所帮助,W3 Issue Tracker可能是请求此类功能的最佳平台。