Grails 如何将类传递给Groovy';s评估绑定?
我正在做一些粗制滥造的事情,比如使用Groovy的元类和Eval从XML导入动态地为对象分配属性:Grails 如何将类传递给Groovy';s评估绑定?,grails,groovy,groovyshell,Grails,Groovy,Groovyshell,我正在做一些粗制滥造的事情,比如使用Groovy的元类和Eval从XML导入动态地为对象分配属性: class ObjectBuilder { def assignProp(String propName, String propValue) { Eval.x(this, "x.metaClass.${propName} = '${propValue}'") } } def h = new ObjectBuilder() h.assignProp('name', 'H
class ObjectBuilder {
def assignProp(String propName, String propValue) {
Eval.x(this, "x.metaClass.${propName} = '${propValue}'")
}
}
def h = new ObjectBuilder()
h.assignProp('name', 'Henson')
println(h.name)
不过,我想做的是能够在类本身中实例化另一个副本:
Eval.x(this, "x.metaClass.${ObjName} = new ObjectBuilder()")
但是我不能,因为我认为类没有传递给绑定。还有其他解决方案吗?传递一个新实例化的对象,然后使用Eval对其进行赋值,这似乎有效:
class ObjectBuilder {
def assignProp(String propName, String propValue) {
Eval.x(this, "x.metaClass.${propName} = '${propValue}'")
}
def nestObj(String objName) {
Eval.xy(this, new ObjectBuilder(), "x.metaClass.${objName} = y")
}
}
ObjectBuilder h = new ObjectBuilder()
h.assignProp('name', 'Henson')
h.nestObj('last')
h.last.assignProp('name', 'Tech')
println h.name + ' ' + h.last.name
传递一个新实例化的对象,然后使用Eval对其进行赋值,这似乎是可行的:
class ObjectBuilder {
def assignProp(String propName, String propValue) {
Eval.x(this, "x.metaClass.${propName} = '${propValue}'")
}
def nestObj(String objName) {
Eval.xy(this, new ObjectBuilder(), "x.metaClass.${objName} = y")
}
}
ObjectBuilder h = new ObjectBuilder()
h.assignProp('name', 'Henson')
h.nestObj('last')
h.last.assignProp('name', 'Tech')
println h.name + ' ' + h.last.name
传递一个新实例化的对象,然后使用Eval对其进行赋值,这似乎是可行的:
class ObjectBuilder {
def assignProp(String propName, String propValue) {
Eval.x(this, "x.metaClass.${propName} = '${propValue}'")
}
def nestObj(String objName) {
Eval.xy(this, new ObjectBuilder(), "x.metaClass.${objName} = y")
}
}
ObjectBuilder h = new ObjectBuilder()
h.assignProp('name', 'Henson')
h.nestObj('last')
h.last.assignProp('name', 'Tech')
println h.name + ' ' + h.last.name
传递一个新实例化的对象,然后使用Eval对其进行赋值,这似乎是可行的:
class ObjectBuilder {
def assignProp(String propName, String propValue) {
Eval.x(this, "x.metaClass.${propName} = '${propValue}'")
}
def nestObj(String objName) {
Eval.xy(this, new ObjectBuilder(), "x.metaClass.${objName} = y")
}
}
ObjectBuilder h = new ObjectBuilder()
h.assignProp('name', 'Henson')
h.nestObj('last')
h.last.assignProp('name', 'Tech')
println h.name + ' ' + h.last.name
有两种解决方案:
Expando
您可以尝试使用一组expando
:
h = new Expando()
h.last = new Expando()
h.last.name = 'tech'
assert h.last.name == 'tech'
直接对对象进行元类化
有两种解决方案:
Expando
您可以尝试使用一组expando
:
h = new Expando()
h.last = new Expando()
h.last.name = 'tech'
assert h.last.name == 'tech'
直接对对象进行元类化
有两种解决方案:
Expando
您可以尝试使用一组expando
:
h = new Expando()
h.last = new Expando()
h.last.name = 'tech'
assert h.last.name == 'tech'
直接对对象进行元类化
有两种解决方案:
Expando
您可以尝试使用一组expando
:
h = new Expando()
h.last = new Expando()
h.last.name = 'tech'
assert h.last.name == 'tech'
直接对对象进行元类化
你想干什么?你能给我一点背景吗?您有一个XML,您从中解析一个对象,然后尝试向其添加一个动态属性?或者它是来自
Xml{Parser | Builder}
的节点
?为什么要实例化ObjectBuilder
?主要目标是什么?嘿@WillP,我想我学到的比什么都多;-)我所做的是读取一个XML,但我想基于它创建一个对象,使用我作为字符串传入的规范(我只需要XML中的一些内容,并使用不同的结构)。这一部分正是我尝试动态构建对象的地方。你想做什么?你能给我一点背景吗?您有一个XML,您从中解析一个对象,然后尝试向其添加一个动态属性?或者它是来自Xml{Parser | Builder}
的节点
?为什么要实例化ObjectBuilder
?主要目标是什么?嘿@WillP,我想我学到的比什么都多;-)我所做的是读取一个XML,但我想基于它创建一个对象,使用我作为字符串传入的规范(我只需要XML中的一些内容,并使用不同的结构)。这一部分正是我尝试动态构建对象的地方。你想做什么?你能给我一点背景吗?您有一个XML,您从中解析一个对象,然后尝试向其添加一个动态属性?或者它是来自Xml{Parser | Builder}
的节点
?为什么要实例化ObjectBuilder
?主要目标是什么?嘿@WillP,我想我学到的比什么都多;-)我所做的是读取一个XML,但我想基于它创建一个对象,使用我作为字符串传入的规范(我只需要XML中的一些内容,并使用不同的结构)。这一部分正是我尝试动态构建对象的地方。你想做什么?你能给我一点背景吗?您有一个XML,您从中解析一个对象,然后尝试向其添加一个动态属性?或者它是来自Xml{Parser | Builder}
的节点
?为什么要实例化ObjectBuilder
?主要目标是什么?嘿@WillP,我想我学到的比什么都多;-)我所做的是读取XML,但我想基于它创建一个对象,使用我作为字符串传入的规范(我只需要XML中的一些内容,并使用不同的结构)。这部分正是我尝试动态构建对象的地方。好吧,这太神奇了!如果XML是这样的,您是否看到过任何模式<代码>亨森威尔?我有一些层次深的数据,带有数组。@techHenson你应该在你的问题中发布带有嵌套结构的XML哦,太神奇了!如果XML是这样的,您是否看到过任何模式<代码>亨森威尔?我有一些层次深的数据,带有数组。@techHenson你应该在你的问题中发布带有嵌套结构的XML哦,太神奇了!如果XML是这样的,您是否看到过任何模式<代码>亨森威尔?我有一些层次深的数据,带有数组。@techHenson你应该在你的问题中发布带有嵌套结构的XML哦,太神奇了!如果XML是这样的,您是否看到过任何模式<代码>亨森威尔?我有一些深层次的数据,带有数组。@techHenson您应该在问题中用嵌套结构发布XML