gpt4 book ai didi

grails - 如何将类传递给 Groovy 的 Eval 绑定(bind)?

转载 作者:行者123 更新时间:2023-12-02 15:00:31 26 4
gpt4 key购买 nike

我正在做一些粗俗的事情,比如使用 Groovy 的 metaClass 和 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()")

但我不能,因为我认为这个类没有传递给绑定(bind)。还有其他解决方案吗?

最佳答案

几个解决方案:

展开

您可以尝试使用一组 Expandos :

h = new Expando()
h.last = new Expando()
h.last.name = 'tech'

assert h.last.name == 'tech'

直接元类化对象
xml = '''
<person>
<name>john</name>
<surname>doe</surname>
<age>41</age>
<location>St Louis, MO</location>
</person>
'''

class Person {
def name, surname, location, age
}

root = new XmlParser().parseText xml

person = new Person(root.children().collectEntries { [it.name(), it.text()] })

person.metaClass.getFullname = { "$delegate.name $delegate.surname" }

assert person.fullname == "john doe"

person.metaClass.likes = "chicken with lemon"

assert person.likes == "chicken with lemon"

map
map = [:]
map.last = [:]
map.last.name = 'Tech'
assert map.last.name == 'Tech'

关于grails - 如何将类传递给 Groovy 的 Eval 绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26241355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com