以字符串形式按名称访问变量值(Groovy) [英] Access variable value by its name as String (groovy)

查看:20
本文介绍了以字符串形式按名称访问变量值(Groovy)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我做了一些研究,但还没有找到适用于我的情况的有效代码。我有两个名为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)

输出:

所需输出:

"HELLO WORLD this is my test"

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

编辑

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

右侧是脚本内部的变量名,左列是值(稍后将是动态的)

推荐答案

您马上就到了。
解决方案不是将值放入单独的变量中,而是将它们放入脚本绑定中。

在开头添加这个(删除变量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)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆