我有一个Settings类和一个配置它的Groovy脚本。设置类如下:
abstract class Settings extends Script {
private static String resourceRoot
static String getResourceRoot() { return resourceRoot }
static void setResourceRoot(String root) { resourceRoot = root }
abstract void apply();
@Override
void run() {
apply()
return null
}
}
我要用来设置resourceRoot
属性的脚本是这样的:
/* conf/settings.groovy */
@Base Settings settings
println "Running script"
resourceRoot = 'src/test/resources' // Does nothing
当我运行该文件时,可以看到“正在运行脚本”消息,但是当我打印Settings.resourceRoot
时,我得到的是空值。
但是,如果我从脚本中显式调用setResourceRoot(String)
和getResourceRoot()
,则一切正常。
这是预期的行为吗?
答案 0 :(得分:0)
事实证明,在脚本中对rowcounter=0
for (item in nrs$hesid){
rowcounter<-rowcounter+1
for (name in colnames(all)){
if (item %in% name){
all['all','name']<-nrs[rowcounter,'TPM']
}
}
}
的调用被委派给脚本绑定,而不是实际的基础基类。这是根据Groovy source编写的代码:
setProperty
要解决我的问题,请使用以下方法覆盖public void setProperty(String property, Object newValue) {
if ("binding".equals(property))
setBinding((Binding) newValue);
else if("metaClass".equals(property))
setMetaClass((MetaClass)newValue);
else
binding.setVariable(property, newValue);
}
方法:
setProperty
现在它可以工作了。 Source article.