Groovy有什么问题?

我的一个朋友正在敲他的头,因为这个Groovy代码。

让我们快速解释一下它的作用。

首先,我们创建一个空映射,然后定义一个作为字符串插值结果的键。 密钥将为"job-4"

然后,我们验证密钥是否已在地图上。 如果地图没有键,则将其添加为值1 ,然后再次执行相同的操作,但是只是这次键将在地图上,并且什么都不会改变。 键"job-4"的值应保持不变,即值1

让我告诉你一些事情,我们都是错的。 实际上,行println(cache[key])将打印2

这太疯狂了!!! 因此,我们研究了其他语言,看看其中一种是否与Groovy的行为相同。

在Ruby中,我们这样做:

它按预期输出值1

在JavaScript中,我们这样做:

它按预期输出值1

在Elixir中,我们这样做:

它按预期输出值1

在Scala中,我们这样做:

它按预期输出值1

Groovy有什么问题!

问题来自Groovy管理动态类型和字符串插值的方式。

当Groovy进行字符串插值时,结果类型为GStringImpl ,这意味着比较不符合您的预期。 我们需要通过.toString()GStringImpl强制为String

如果仅这样做:

def key = "job-${4}".toString()

一切都按预期开始。

结论

停止使用Groovy !!!

From: https://hackernoon.com/what-is-wrong-with-groovy-482b7064f591

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值