2012-08-10 28 views
0

有没有一种通用的方法来调用一个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)
  • 的javascript:functionname.apply(null, args)
  • PHP: call_user_func_array('functionname', $args)

回答

2

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

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

+0

函数签名查找如何与动态函数调用交互尚不清楚。好点子。 – 2012-08-10 20:48:07

相关问题