在XQuery中实现策略模式,通常是反射函数

在XQuery中实现策略模式,通常是反射函数,xquery,marklogic,strategy-pattern,Xquery,Marklogic,Strategy Pattern,我想知道是否有办法内省XQuery模块并动态访问函数。这将帮助我实现GOF策略模式,因为XQuery不支持同一接口的多个实现 当然,问题是除了检查变量类型之外,XQuery中似乎不支持内省 关于如何在XQuery中实现此模式,您有什么想法吗?(我使用MarkLogic 9) 非常感谢, K 注:不幸的是,我发现大多数XQuery资源都集中在这个或那个功能的小细节上,但我找不到一个这样的资源,它将XQuery本身作为一种严肃的编程语言,并解决此类软件设计问题,XQuery 3.0+和MarkLog

我想知道是否有办法内省XQuery模块并动态访问函数。这将帮助我实现GOF策略模式,因为XQuery不支持同一接口的多个实现

当然,问题是除了检查变量类型之外,XQuery中似乎不支持内省

关于如何在XQuery中实现此模式,您有什么想法吗?(我使用MarkLogic 9)

非常感谢, K


注:不幸的是,我发现大多数XQuery资源都集中在这个或那个功能的小细节上,但我找不到一个这样的资源,它将XQuery本身作为一种严肃的编程语言,并解决此类软件设计问题,XQuery 3.0+和MarkLogic 9支持一流的功能。在许多情况下,您可以使用一级函数和依赖项注入将常见的OO设计模式重新编写成函数编程等价物

此外,您还可以通过
xdmp:functions()
访问范围内函数

有一种方法可以在ML中获得类似反射的功能,但这是一种黑客行为。看看这个库,它抛出一个异常,捕获它,并使用异常负载检查堆栈:


要了解更多XQuery编程模式和技术,您可能需要查看各种面向XML的会议记录,如、和。此外,在GitHub repos中搜索XQuery项目和阅读代码也会有所帮助。

许多常见的设计模式都采用了面向对象的世界观。XQuery绝对是功能性的。如果您更具体地描述您试图实现的功能,可能有人会指导您使用适当的功能模式。XQuery 3.1还提供函数load-XQuery-module(),该函数将a库模块作为输入,并返回对模块中定义的函数的引用。谢谢您的回答。我想我需要等待ML实现动态模块加载,直到那时,我将坚持为策略传递标识符,并使用这些标识符将函数存储在映射中。