【问题标题】:Assign class variables with a loop in groovy在groovy中使用循环分配类变量
【发布时间】:2021-03-26 12:57:57
【问题描述】:

我在弄清楚如何完成我正在寻找的东西时遇到了一些麻烦。假设我有 5 个不同的字符串变量: 字符串 string1 = "A"

字符串 string2 = "B"

字符串 string3 = "A"

字符串 string4 = "B"

String string5 = "A"

我想要做的是遍历这 5 个变量,如果它们等于 B,我想将它们设置为 A。我尝试过的是这样的:

[string1,string2,string3,string4,string5].each {
     if (it == "B"){
        //don't know what to put here
        need to set variable = "A" here
     }
}

我不知道如何在分配的闭包中获取实际的变量名。也许我没有正确搜索我想要做的事情,但我需要能够通过这个循环将 strin2 和 string4 设置为“A”。

我知道我可以做 5 个 if 语句,但我知道必须有更好的方法。

【问题讨论】:

  • 您想更改 string1 等变量指向的对象,还是想保留该引用原样并在列表中放置一个新值来代替旧值(这不会对string1 引用产生任何影响)?
  • 我想改变它指向的东西,从A到B。我不在乎原来的值是什么。
  • @jcattau,这取决于你如何声明那些 string1-string5。如果这些是某些对象/地图/脚本的成员/属性 - 那么obj['string1'] = "B" 将执行分配。如果它们是局部变量 - 那就没有机会了。

标签: loops variables groovy variable-assignment


【解决方案1】:

如果是 groovy 对象或映射,您可以使用 obj[property] = value 设置对象(类)成员

例如

@groovy.transform.ToString
class X {
    String string1 = "A"
    String string2 = "B"
    String string3 = "A"
    String string4 = "B"
    String string5 = "A"

    void switchAll(vOld,vNew){
        this.getProperties().each{k,v->
            if(k ==~ /string\d+/ && v==vOld) this[k] = vNew
        }
     }
     
}

def x = new X()
println x

x.switchAll("B","C")
println x

打印:

X(A, B, A, B, A)
X(A, C, A, C, A)

【讨论】:

  • 我将看看我是否可以使用它,但字符串 1 到 5 可能并不总是“A”或“B”,所以我想遍历它们并检查它们是否是“A”,如果是,则改为“B”。但这些是我试图使用的局部变量。
  • 我的回答 if( ... v==vOld) 中有一个条件。你在你的问题中提到它是一个类变量。使用局部变量 - 什么都行不通。
  • 很抱歉,我对自动化测试的开发有足够的了解,但仍然在一些概念上苦苦挣扎。它们是在类中声明的类变量,而不是局部变量。我混淆了这个概念。
猜你喜欢
  • 2019-08-11
  • 2015-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多