Grails 如何将类传递给Groovy';s评估绑定?

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

我正在做一些粗制滥造的事情,比如使用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', '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