繁体   English   中英

Groovy String评估运行时

Groovy String evaluation runtime

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

static value= ''
static construct = "${-> value - '/'}"

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

但是当我这样做的时候

static value= ''
static construct = {-> value - '/'}

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

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

def someCoplmexMethod(){
   value="/www.stackoverflow.com"
}
1 个回复

简而言之, "${-> value - '/'}"是一个完全懒惰的评估GString的值。

首先澄清一些事情...... "value"是一个值为“value”的String。 "$value"是一个GString,它等于值的值为String。 因此,如果value是"lol.com" ,那么这也是GString等于的值。

需要注意的重要事项是这里有两件事,GString的值是懒惰的,但是用于此的对象不是。 因此,如果在"$value"值中是一个带有toString()方法的类,那么每次都会返回一个不同的String,那么GString的toString()每次都会不同。 当然,String对象不是这种情况。 所以如果你有例如代码

def value=1
def gstring="$value"
value=2
assert gstring=="1"

那么gstring仍然是"2"

{->value}现在是一个打开的块,它将返回值。 评估是懒惰的,因此每次都是如此。 所以

def value=1
def closure={->value}
def a=closure()
value=2
def b=closure()
assert a==1
assert b==2

然后a将得到值1和b得到值2.方法调用表达式closure()将调用open块。

最后, "${-> value - '/'}"将被视为包含开放块的GString。 每次像往常一样调用toString()方法时,GString将评估open块,但这次这将导致open块的调用,从而再次计算值本身。 结果是:

def value=1
def gstring="${-> value}"
value=2
assert gstring=="2"

如果您将示例与简单的GString版本进行比较,那么您将看到结果已更改。 一个更复杂的例子:

def i=1
def gstring="${-> i++}"
assert gstring=="1"
assert i==2
assert gstring=="2"
assert i==3
assert gstring=="3"
assert i==4

如您所见,由于open块,每次计算时,gstring的toString()值都会发生变化。

2 在运行时评估groovy字符串表达式

如果我有代码(如不起作用): 并且xml属性中的值是“时间是$ {new Date()}” 如何让Groovy在运行时评估此表达式? 使用上面的代码我得到“时间是$ {(新日期()}”而不是评估.... 谢谢你的任何想法.... ...

3 运行时公式评估

我想评估用户可以为许多数据点输入的公式,因此效率是一个问题。 这是针对Fortran项目的,但是到目前为止,我的解决方案都集中在使用yacc / bison语法上,因此我可能会使用Fortran的iso_c_binding功能来连接yyparse()。 首选(到目前为止)的解决方案是对B ...

4 如何评估程序的运行时?

我开发了一个简单的程序,想在真机上评估它的运行时性能,例如我的 MacBook。 源代码如下: 它是用 gcc 编译的,优化标志设置为默认值。 在 bash 脚本的帮助下,我运行了 1000 次,并通过我的 MacBook 记录了运行时间,如下所示: "[a, b): n" 表示同一程序的 ...

6 为什么Groovy不打印运行时参数?

我的Groovy应用程序: 当我运行以下命令时: java -jar -DshouldPrint = yes myapp.jar 我得到: Arg0为:[Ljava.lang.String; @ a7e666 为什么不时髦地向我展示我的运行时参数的值? ...

8 Groovy运行时类型处理如何工作?

我最近发现groovy使用NumberMath实现来进行数学计算。 所以: 使用BigDecimalMath.java设置精度和小数位数 。 我只是在stackoverflow的其中一篇文章中了解了这一点。 但是我还是很困惑。 那么,这一般如何运作? 那里是否有关于运行 ...

9 Groovy通过Java运行时出现错误

用过groovy和Java我有用来吐唾沫的groovy脚本, 使用Java代码运行时出现错误: 得到错误: 运行groovy脚本时运行良好,仅通过Java运行时出现错误。 ...

10 PolyML运行时评估

我目前正在使用PolyML 5.5.2,并尝试创建一个运行时编译器函数,该函数需要一个字符串并运行它。 所需的功能应该像 有趣的评估字符串->单位 输入时 > eval“ val a = 1;”; val a = 1:整数 我已经做过一些研 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM