groovy - 通过名称访问变量值作为 String (groovy)

标签 groovy eval

我已经做了一些研究,但还没有找到适用于我的案例的工作代码。我有两个名为 testtest2 的变量,我想将它们以 [test:valueof(test), test2:valueof(test2 )]

我的代码如下:

def test="HELLO"
def test2="WORLD"
def queryText = "\$\$test\$\$ \$\$test2\$\$ this is my test"

def list = queryText.findAll(/\$\$(.*?)\$\$/)

def map = [:]
list.each{
    it = it.replace("\$\$", "")
    map.putAt(it, it)
}

queryText = queryText.replaceAll(/\$\$(.*?)\$\$/) { k -> map[k[1]] ?: k[0] }

System.out.println(map)
System.out.println(queryText)

输出:

output

期望的输出:

"HELLO WORLD this is my test"

我想我需要像 map.putAt(it, eval(it))

这样的东西

编辑

这是我获取输入的方式。代码进入'test'脚本

右边的是脚本中的变量名,左边的列是值(稍后将是动态的)

enter image description here enter image description here

最佳答案

你快到了。
解决方案不是将值放入单独的变量中,而是将它们放入脚本绑定(bind)中。

在开头添加这个(删除变量testtest2):

def test="HELLO"
def test2="WORLD"
binding.setProperty('test', test)     
binding.setProperty('test2', test2)  

并改变这个:

{ k -> map[k[1]] ?: k[0] }

为此:

{ k ->  evaluate(k[1]) }

关于groovy - 通过名称访问变量值作为 String (groovy),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43513029/

相关文章:

Grails 启动两个内存数据库用于开发/测试?

java - 为 Gradle 中的不同文件夹生成两个源 Jar?

grails - Groovy:在静态作用域中发现了明显变量 xyz,但不引用局部变量、静态字段或类。可能的原因:

python - “numpy.ndarray”对象没有属性 'concatenate'错误

perl - 我如何在 Perl 中舍入一个值?

python - 用于列表反序列化的 Python 'eval' 的安全性

grails - 如何管理 grails 中多个表的分页?

unit-testing - 如何模拟一种在clazz中传递的方法?

python - Pandas:使用 df.eval 和字符串变量作为条件过滤

python - 处理存储在字典中的解析变量