问题标签 [gstring]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3795 浏览

java - 如何在 Groovy 中从没有“${str}”的字符串创建 GString

我有String来自 Java 的变量(例如,str),它存储一些GString表达式,可以说,它绝对是来自用户输入的动态字符串,我不知道会有"SELECT ${path} path FROM dual"多少。${}

而且我不想在通过当前绑定sql.rows()评估的情况下使用它。${path}PreparedStatement

问题是:

  1. 如果我不strGString某种方式转换,它将抛出SQLException,因为没有PreparedStatement我们需要在 . 周围使用引号'${path}'。但它是不安全的,而且 Groovy 会生成警告(我们应该使用PreparedStatement和删除引号)。
  2. 如果我将转换strGString这种方式:sql.rows("${str}"),那么 Groovy 将使用绝对错误的准备好的语句,其中只包含"?",当然,它不起作用,我需要语句:"SELECT ? path FROM dual"

问题是我们如何GStringString使用 包装它"${}"?或者我们如何才能只评估GString(only str, not path) 的第一级?或者我该如何以其他方式解决这个问题?

谢谢你。

0 投票
1 回答
4892 浏览

string - Groovy 字符串评估运行时

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

因此,当我重视= "/www.stackoverflow.com" 时,构造等于 "www.stackoverflow.com "

但是当我这样做时

construct等于某个闭包名称。我想知道这样做的目的是什么?为什么使用闭包,GString 一切正常?为什么只使用闭包什么都没有发生?

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

0 投票
2 回答
1252 浏览

groovy - Groovy 中 GString 中的 Elvis 运算符

当我用以下方式调用它时:

我得到以下结果:

为什么闭包返回true而不是''or-somehting

0 投票
1 回答
979 浏览

reflection - 在 groovy 中访问 POJO 属性的简单方法?

我是 groovy 的新手,仍在学习我的方式。有没有一种简单的方法可以使用点表示法在 groovy 中获取 POJO 属性值?例如,我有以下 POJO:

在 groovy 中,我想获取 name 字段的值,如下所示:

以上不起作用。我知道我仍然可以使用 java getter 和 setter,但我希望能够达到可以动态提取 pojo 值的程度,如下所示:

我试图避免使用 java 反射。谢谢您的帮助!

0 投票
1 回答
561 浏览

groovy - 为什么在地图中寻址 GString 键的方式会有不同的行为?

在研究官方文档中的 Groovy (2.4.4) 语法时,我遇到了有关使用 GStrings 作为标识符的映射的特殊行为。如文档中所述,GStrings 作为(哈希)映射标识符是一个坏主意,因为非评估 GString 对象的哈希码与具有与评估 GString 相同表示的常规字符串对象不同。

例子:

然而,我的直觉预期是,使用实际的 GString 标识符来寻址映射中的键实际上会传递值 - 但事实并非如此。

这让我很好奇。所以我对这个问题提出了一些建议并做了一些实验。

(请记住,我是 Groovy 的新手,我只是在进行头脑风暴 - 如果您不想阅读我如何尝试检查问题的原因,请继续建议 #4)

建议#1。无论出于何种原因,GString 对象的哈希码工作/实现有点不确定,并根据上下文或实际对象提供不同的结果。

事实证明这是胡说八道:

建议#2。映射或映射项中的实际键没有预期的表示或哈希码。

我仔细查看了地图中的项目、密钥及其哈希码。

所以map里面key的hashcode和GString hashcode是不一样的。哈!或不。虽然很高兴知道,但实际上并不相关,因为我仍然知道地图索引中的实际哈希码。我只是重新散列了一个在放入索引后已转换为字符串的键。还有什么?

建议#3。GString 的 equals 方法具有未知或未实现的行为。

无论两个哈希码是否相等,它们都可能不代表一个映射中的同一个对象。这取决于 key-object 类的 equals 方法的实现。例如,如果未实现 equals 方法,即使哈希码相同,两个对象也不相等,因此无法正确寻址所需的映射键。所以我尝试了:

所以默认情况下,相同 GString 的两个表示是相等的。

我跳过了我尝试过的其他一些想法,并继续我在写这篇文章之前尝试的最后一件事。

建议#4。访问的语法很重要。

那是一个真正的理解杀手。我以前知道:两个访问映射值的语法不同。每种方式都有其限制,但我认为结果保持不变。好吧,这出现了:

因此,如果我使用地图的 get 方法,我首先会以我期望的方式获得实际值。

这种关于 GStrings 的地图访问行为的解释是什么?(或者这里隐藏着什么样的菜鸟错误?)

谢谢你的耐心。

编辑:恐怕我的实际问题没有明确说明,所以简明扼要地说:

当我有一个带有 GString 作为键的地图时

为什么这会返回值

但这并不

?

0 投票
2 回答
516 浏览

json - 如何在 '' 中为 json 使用 GString 替换

我通常''用于json,例如

或者

我在测试中有一个案例,我想用另一个字符串替换其中的一部分,例如:

有没有办法使这项工作?附件''正在关闭替换。

谢谢!

0 投票
2 回答
815 浏览

performance - 在 Grails 和 Groovy 中,字符串(单引号)是否优于 GStrings?

由于在 Grails 和 Groovy 中,单引号字符串是与 GStrings 不同的类(双引号字符串允许 ${variable} 值注入),使用单引号是否更有效,除非使用 ${variables} ?我猜双引号的存在需要解析普通单引号字符串不需要的字符串。因此,我预计寻找 ${} 存在的额外时间会对性能造成非常轻微的影响。

因此,一般来说,鼓励使用单引号似乎是有益的,除非使用双引号有特定的优势。我不在基地吗?

0 投票
0 回答
152 浏览

intellij-idea - 修复 IntelliJ IDEA 中不必要的 GString 违规

当我使用 CodeNarc 分析我的项目时,我得到了大量的UnnecessaryGString违规行为。

ALT我可以通过按+ENTER并选择Convert to String选项来一一修复它们。虽然这是一个非常乏味的过程。

IntelliJ 中是否有任何自动修复可以用字符串替换所有不必要的 GString?如果没有,我需要做什么来创建自己的?

目前我使用容易出错的替换从"([^$\n"]+)"(?!\()to '$1'。它在更复杂的情况下(例如转义)给出了一些误报。

0 投票
1 回答
224 浏览

regex - 解析 GString 样式变量时的 Groovy 正则表达式 PatternSyntaxException

这里很时髦。我得到了一个String带有 GString风格的变量,比如:

请记住,这打算用作实际的 GString !!!也就是说,我不会有Groovy 将在运行时解析的 3 个字符串变量(分别为animalrole) 。相反,我希望对这些“目标”字符串做两件不同的事情:bodyPart

  • 我希望能够"${*}"在目标字符串中找到这些变量 refs ( ) 的所有实例,并将其替换为?; 和
  • 我还需要找到这些变量 refs 的所有实例并获取一个列表(允许欺骗)及其名称(在上面的示例中,将是[animal,role,bodyPart]

迄今为止我最好的尝试:

...在PatternSytaxException我运行任一方法时产生:

有什么想法我会出错吗?

0 投票
2 回答
2151 浏览

dictionary - 为什么 Map 不适用于 Groovy 中的 GString?

使用以下代码段,我无法gString从地图中检索:

这怎么可能?

断言消息清楚地表明 Groovy 存在严重问题:

这与为什么 groovy 看不到字典中的某些值不是同一个问题? 那里的第一个答案表明:

您将 GString 实例添加为地图中的键,然后使用 String 实例搜索它们。

在这个问题中,我清楚地添加GString并尝试检索GString.

也不是为什么在地图中处理 GString 键的方式有不同的行为?在GStringImpl上使用 equals() 和 == 的 Groovy 不同的结果对我来说也有答案。我不会改变任何东西,也不会StringGString.