标签: gstring

如何避免评估GString

我正在使用groovy扩展传统脚本系统。源脚本是“类似于Java的”,因此它几乎可以解析为具有一些预处理的常规脚本。

我正在使用invokeMethod()和missingMethod()来传递旧代码,从而使我能够使用闭包和其他常规功能来增强脚本。但是,原始脚本使用“ $ foo”类型的字符串来引用变量。当遗留方法被missingMethod()捕获时,我需要它不将该字符串评估为GString,而只是逐字输出。这有可能吗?

groovy gstring

3
推荐指数
1
解决办法
2484
查看次数

Grails使用gstrings访问嵌套字段

我试图使用gstring访问嵌套字段但它抛出异常groovy.lang.MissingPropertyException

我有两节课

Class Person{
   Address address
}
Class Address{
  String city
}
Run Code Online (Sandbox Code Playgroud)

在我的代码的某处,我正在做,

def person = Person.get(1)
def field = "address.city"
def city = person."${field}"
Run Code Online (Sandbox Code Playgroud)

我试图从人那里获取城市的行正在抛出groovy.lang.MissingPropertyException

如果我尝试使用gstring获取直接属性它可以工作,但上面给出的代码不起作用.

有帮助吗?

grails groovy gstring

3
推荐指数
1
解决办法
1460
查看次数

Python中的GStrings

Groovy有一个GStrings的概念.我可以写这样的代码:

def greeting = 'Hello World'
println """This is my first program ${greeting}"""
Run Code Online (Sandbox Code Playgroud)

我可以从String中访问变量的值.

我怎么能用Python做到这一点?

- 谢谢

python gstring

2
推荐指数
1
解决办法
766
查看次数

Groovy如何从一个GString中的char []转换为String?

我试图找出Groovy如何将a char[]转换为Stringa GString.

例:

char[] pchar = ['p', 'a', 's', 's']
println "$pchar"
Run Code Online (Sandbox Code Playgroud)

结果:

通过

起初我假设它会在char [](http://groovy.codehaus.org/groovy-jdk/primitive-types/char [] .html#toString())上使用toString()方法.但运行以下代码的结果似乎暗示:

char[] pchar = ['p', 'a', 's', 's']
println "$pchar"

pchar.class.metaClass.toString = {->
    "****"
}

println pchar.toString()
println "$pchar"
Run Code Online (Sandbox Code Playgroud)

结果:

通过

****

通过

我也试过压倒invokeMethod()试图搞清楚无济于事:

char[] pchar = ['p', 'a', 's', 's']
println "$pchar"

pchar.class.metaClass.toString = {->
    "****"
}
pchar.class.metaClass.invokeMethod = {String methodName, Object arguments ->
    println("Method called on ${delegate.class}: $methodName, $arguments")
    def metaMethod = delegate.metaClass.getMetaMethod(methodName)
    return …
Run Code Online (Sandbox Code Playgroud)

groovy tostring gstring

2
推荐指数
1
解决办法
3688
查看次数

Groovy String评估运行时

嗨,我有一个填充运行时的字符串值,我想用它来构造另一个字符串.

static value= ''
static construct = "${-> value - '/'}"
Run Code Online (Sandbox Code Playgroud)

所以,当我 ="/www.stackoverflow.com"时,构造等于"www.stackoverflow.com "

但是当我这样做的时候

static value= ''
static construct = {-> value - '/'}
Run Code Online (Sandbox Code Playgroud)

construct等于一些关闭名称.我想知道这是什么目的?为什么使用闭包,GString一切正常?为什么只使用闭合没有任何反应?

已编辑: 此方法调用的值已更改.

def someCoplmexMethod(){
   value="/www.stackoverflow.com"
}
Run Code Online (Sandbox Code Playgroud)

string groovy closures gstring

2
推荐指数
1
解决办法
3874
查看次数

在Grails和Groovy中,字符串(单引号)的表现优于GStrings吗?

由于Grails和Groovy中,单引号字符串是从GString的(双引号字符串允许$ {变量}值注射)不同的类,它是更有效的使用单引号,当正在使用的$ {变量}除?我猜测双引号的存在将需要解析普通的单引号字符串不需要的字符串.因此,我希望从寻找$ {}的额外时间中获得非常轻微的性能影响.

因此,除非使用双引号具有特定优势,否则通常有一个鼓励使用单引号的约定似乎是有益的.我是不是基地?

performance groovy gstring

2
推荐指数
2
解决办法
500
查看次数

如何在循环中将 Jenkinsfile 参数值作为字符串访问

在我们的 Jenkinsfile 中,我们有很多参数(参数化构建),在这种情况下,我想检查每个参数是否被切换并对其采取行动。这些参数具有相似的名称,但以不同的小数结尾,因此我想对它们进行迭代以实现此目的。

我有类似的东西:

if ("${TEST_00}" == "true") { testTasksToRun.add(testsList[0]) }
if ("${TEST_01}" == "true") { testTasksToRun.add(testsList[1]) }
if ("${TEST_02}" == "true") { testTasksToRun.add(testsList[2]) }
if ("${TEST_03}" == "true") { testTasksToRun.add(testsList[3]) }
if ("${TEST_04}" == "true") { testTasksToRun.add(testsList[4]) }
if ("${TEST_05}" == "true") { testTasksToRun.add(testsList[5]) }
Run Code Online (Sandbox Code Playgroud)

但我想有类似的东西:

for(int i=0; i<testsList.size(); i++) {
    if ("${TEST_0${i}}" == "true") {
        testTasksToRun.add(testsList[i])
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图寻找解决方案并在 GroovyConsole 上进行试验,但没有设法让任何事情发挥作用。看起来它与“绑定”有关,但我对此并不熟悉。

groovy gstring jenkins-pipeline

2
推荐指数
1
解决办法
9158
查看次数

替换文件中的GString标记

我有一个以xml格式保存的word文档.在本文档中,有一些GString标签,如$ name.

在我的groovy代码中,我加载xml文件来替换这个GString标记,如下所示:

    def file = new File ('myDocInXml.xml')
    def name = 'myName'
    file.eachLine { line ->
        println line
    }
Run Code Online (Sandbox Code Playgroud)

但它不起作用.GString标签不会被我的变量'name'替换.

谁能帮助我?

谢谢

groovy file gstring

1
推荐指数
1
解决办法
2521
查看次数

Sql.execute中的Groovy GString - 文本变量未被'包围'并且查询失败

我有以下问题,当我将GString传递给SQL.executeInsert时,文本变量不会被自动索引,'因此插入查询失败:

String value4fa = "I would like to get know"
int value4fb = 2
def query = "INSERT INTO TAB_A (F_A, F_B) VALUES (${value4fa}, ${value4fb})"
sql.executeInsert(query);
Run Code Online (Sandbox Code Playgroud)

如果我'自己放:

 def query = "INSERT INTO TAB_A (F_A, F_B) VALUES ('${value4fa}', ${value4fb})"
Run Code Online (Sandbox Code Playgroud)

Groovy告诉我,我已经引入了一个安全漏洞,因为Groovy不能使用PreparedStatement来执行SQL查询.

任何人都可以解释我如何强制Groovy正确评估查询正文并准备变量?

sql groovy gstring

1
推荐指数
1
解决办法
3317
查看次数

在Groovy中获取其名称的变量值

我定义了以下变量:

def VAL1 = 'foo'
def VAL2 = 'bar'

def s2 = 'hello ${VAL1}, please have a ${VAL2}'
Run Code Online (Sandbox Code Playgroud)

使这种替换最简单的方法是什么?我如何构建GString s2并对其进行评估?(VALs和s2是从数据库加载的,这个代码片段仅用于演示我的问题.)

groovy gstring

1
推荐指数
1
解决办法
5399
查看次数

可以更改malloc返回的指针

在为个人项目编程时,我发现当我将指针传递给一个函数时,它的值无法更改.例:

...
GString *buf = NULL;
buf = g_string_sized_new(64);
somefunc(buf, filename);
...
Run Code Online (Sandbox Code Playgroud)

void somefunc(GString *buf, gchar *filename)
{
    buf = otherfunc(filename); //otherfunc() returns a GString *
}
Run Code Online (Sandbox Code Playgroud)

在观察调试器后我观察到当缓冲区内存分配运行时,则buf = 0x80b720和otherfunc()返回0x80b750.虽然缓冲区的值没有变化.所以我想问一下是否有人知道为什么会发生这种情况,以及这是否是malloc()的一般特征.换句话说,如果将malloc()调用返回的指针传递给函数,那么您是否可以在函数体内部或外部更改此值?

c malloc gstring

1
推荐指数
1
解决办法
215
查看次数

标签 统计

gstring ×11

groovy ×9

c ×1

closures ×1

file ×1

grails ×1

jenkins-pipeline ×1

malloc ×1

performance ×1

python ×1

sql ×1

string ×1

tostring ×1