gpt4 book ai didi

groovy - Groovy 中静态闭包的访问值

转载 作者:行者123 更新时间:2023-12-05 01:25:32 25 4
gpt4 key购买 nike

我想在静态闭包中存储一些属性,然后在方法调用期间访问它们:

class Person {  
static someMap = { key1: "value1", key2: "value2" }
}

那么如何在 Person 中编写一个方法来检索这些存储的数据呢?

最佳答案

对于简单的情况,最好使用 map 。

如果你真的想把它作为一个闭包来评估(可能是为了创建你自己的 DSL),你需要像 John 指出的那样稍微改变你的语法。这是使用 Builder 类来评估传递给构建器的任何内容中的“某物”闭包的一种方法。

它使用 groovy 元编程来拦截缺少方法/属性的调用并保存它们:

class SomethingBuilder {
Map valueMap = [:]

SomethingBuilder(object) {
def callable = object.something
callable.delegate = this
callable.resolveStrategy = Closure.DELEGATE_FIRST
callable()
}

def propertyMissing(String name) {
return valueMap[name]
}

def propertyMissing(String name, value) {
valueMap[name] = value
}

def methodMissing(String name, args) {
if (args.size() == 1) {
valueMap[name] = args[0]
} else {
valueMap[name] = args
}
}
}

class Person {
static something = {
key1 "value1" // calls methodMissing("key1", ["value1"])
key2("value2") // calls methodMissing("key2", ["value2"])
key3 = "value3" // calls propertyMissing("key3", "value3")
key4 "foo", "bar", "baz" // calls methodMissing("key4", ["foo","bar","baz"])
}
}

def builder = new SomethingBuilder(new Person())

assert "value1" == builder."key1" // calls propertyMissing("key1")
assert "value2" == builder."key2" // calls propertyMissing("key2")
assert "value3" == builder."key3" // calls propertyMissing("key3")
assert ["foo", "bar", "baz"] == builder."key4" // calls propertyMissing("key4")

关于groovy - Groovy 中静态闭包的访问值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2128115/

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