Groovy 如何动态组合变量名?
我需要生成一个列表,并根据for循环索引命名它的项 数字,如下所示:Groovy 如何动态组合变量名?,groovy,Groovy,我需要生成一个列表,并根据for循环索引命名它的项 数字,如下所示: for(int i=0;i<someNumber;i++){ Model m_{$i}=Mock() //but this doesn't work ...... models.add(i,m_{$i}) } for(int i=0;i由于Groovy,您还可以在运行时向模拟类添加一些属性 class myClass { String someProperty } def mode
for(int i=0;i<someNumber;i++){
Model m_{$i}=Mock() //but this doesn't work
......
models.add(i,m_{$i})
}
for(int i=0;i由于Groovy,您还可以在运行时向模拟类添加一些属性
class myClass {
String someProperty
}
def models = []
10.times { it ->
def instance = new myClass(someProperty: "something")
instance.metaClass.testId = it
models.add(instance)
}
// delete some
println "Removing object with testId = " + models.remove(4).testId
println "Removing object with testId = " + models.remove(7).testId
def identifiersOfObjectsAfterRemoves = models.collect { it.testId }
def removedObjectsIdentifiers = (0..9) - identifiersOfObjectsAfterRemoves
println "Identifiers of removed objects: " + removedObjectsIdentifiers
你为什么要这样做?也许Map在这种情况下会更好?另外,你不能通过查询例如:models[1]
而不是m_1
?来调试测试代码(遗憾地告诉你这一点),但请告诉我这是否可能?在测试代码执行期间,某些项将被添加或删除,因此我需要知道哪些项被添加或删除?它们将如何被删除?从模型列表中?谢谢,我非常感谢您的回答,但我正在使用spock测试java代码,此列表将传递到java对象中,我无法确定t更改了java代码。是否因为没有人提供直接答案而不可能?我刚刚更新了答案。也许这一次会更有帮助:)我不确定是否可以向模拟对象添加任何属性。(我将检查它)。因此不可能将索引与项名相结合。如果可能,这件事将比这容易得多。这可能要感谢元类属性(在我的答案中链接)。检查它,我们将看看它是否是处理您的问题的好方法。谢谢,您的答案仍然不能解决我的问题(我添加了一张图片来说明原因),但它对于我的问题来说已经足够好了。