Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy 如何动态组合变量名?_Groovy - Fatal编程技术网

Groovy 如何动态组合变量名?

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循环索引命名它的项 数字,如下所示:

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代码。是否因为没有人提供直接答案而不可能?我刚刚更新了答案。也许这一次会更有帮助:)我不确定是否可以向模拟对象添加任何属性。(我将检查它)。因此不可能将索引与项名相结合。如果可能,这件事将比这容易得多。这可能要感谢元类属性(在我的答案中链接)。检查它,我们将看看它是否是处理您的问题的好方法。谢谢,您的答案仍然不能解决我的问题(我添加了一张图片来说明原因),但它对于我的问题来说已经足够好了。