我想创建一个宏,它接受一个字符串作为参数,并将其计算为一个对象。类似于:
#macro( valueTest $objRef)
#define( $obj )#evaluate("$${objRef}")#end
$obj.foo ## This would have to be translated to $obj.getFoo()
#end不幸的是,$obj变量没有指向可用于调用方法的对象引用。$obj是一个字符串,$obj.foo不会尝试执行getFoo。
为什么我觉得这就是评估的本质,不可能做我想做的事情。
我之所以要做这样的smth,是因为我们有相当少的宏同时接受命令绑定路径和命令本身作为参数,我希望后者可以从第一个派生出来。
发布于 2010-10-21 12:49:12
Unfortunately, Velocity does not have a mechanism to define functions which return object references. Macros are really intended to be a shortcut to display text.在这种情况下,继续的方法通常是在Java中创建一个“工具”,并在上下文中放置一个实例。工具只是一个普通的类,其中包含一个返回所需内容的方法
例如:
使用"eval“方法创建一个对象,然后将其作为"referenceEvaluator”放入上下文中。
#set($obj = $referenceEvaluator.eval($objRef))如果避免双重求值,只需将一个对象插入到执行所需操作的名为$obj的上下文中,您可能会发现您的代码更加清晰。(性能也更好)。
https://stackoverflow.com/questions/3913046
复制相似问题