问题标签 [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.
java - 如何在 Groovy 中从没有“${str}”的字符串创建 GString
我有String
来自 Java 的变量(例如,str
),它存储一些GString
表达式,可以说,它绝对是来自用户输入的动态字符串,我不知道会有"SELECT ${path} path FROM dual"
多少。${}
而且我不想在通过当前绑定sql.rows()
评估的情况下使用它。${path}
PreparedStatement
问题是:
- 如果我不
str
以GString
某种方式转换,它将抛出SQLException
,因为没有PreparedStatement
我们需要在 . 周围使用引号'${path}'
。但它是不安全的,而且 Groovy 会生成警告(我们应该使用PreparedStatement
和删除引号)。 - 如果我将转换
str
为GString
这种方式:sql.rows("${str}")
,那么 Groovy 将使用绝对错误的准备好的语句,其中只包含"?"
,当然,它不起作用,我需要语句:"SELECT ? path FROM dual"
。
问题是我们如何GString
不String
使用 包装它"${}"
?或者我们如何才能只评估GString
(only str
, not path
) 的第一级?或者我该如何以其他方式解决这个问题?
谢谢你。
string - Groovy 字符串评估运行时
您好我有一个在运行时填充的字符串值,我想用它来构造另一个字符串。
因此,当我重视= "/www.stackoverflow.com" 时,构造等于 "www.stackoverflow.com "
但是当我这样做时
construct
等于某个闭包名称。我想知道这样做的目的是什么?为什么使用闭包,GString 一切正常?为什么只使用闭包什么都没有发生?
已编辑: 此方法调用的值已更改。
groovy - Groovy 中 GString 中的 Elvis 运算符
当我用以下方式调用它时:
我得到以下结果:
为什么闭包返回true
而不是''
or-somehting
reflection - 在 groovy 中访问 POJO 属性的简单方法?
我是 groovy 的新手,仍在学习我的方式。有没有一种简单的方法可以使用点表示法在 groovy 中获取 POJO 属性值?例如,我有以下 POJO:
在 groovy 中,我想获取 name 字段的值,如下所示:
以上不起作用。我知道我仍然可以使用 java getter 和 setter,但我希望能够达到可以动态提取 pojo 值的程度,如下所示:
我试图避免使用 java 反射。谢谢您的帮助!
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 作为键的地图时
为什么这会返回值
但这并不
?
json - 如何在 '' 中为 json 使用 GString 替换
我通常''
用于json,例如
或者
我在测试中有一个案例,我想用另一个字符串替换其中的一部分,例如:
有没有办法使这项工作?附件''
正在关闭替换。
谢谢!
performance - 在 Grails 和 Groovy 中,字符串(单引号)是否优于 GStrings?
由于在 Grails 和 Groovy 中,单引号字符串是与 GStrings 不同的类(双引号字符串允许 ${variable} 值注入),使用单引号是否更有效,除非使用 ${variables} ?我猜双引号的存在需要解析普通单引号字符串不需要的字符串。因此,我预计寻找 ${} 存在的额外时间会对性能造成非常轻微的影响。
因此,一般来说,鼓励使用单引号似乎是有益的,除非使用双引号有特定的优势。我不在基地吗?
intellij-idea - 修复 IntelliJ IDEA 中不必要的 GString 违规
当我使用 CodeNarc 分析我的项目时,我得到了大量的UnnecessaryGString
违规行为。
ALT我可以通过按+ENTER并选择Convert to String
选项来一一修复它们。虽然这是一个非常乏味的过程。
IntelliJ 中是否有任何自动修复可以用字符串替换所有不必要的 GString?如果没有,我需要做什么来创建自己的?
目前我使用容易出错的替换从"([^$\n"]+)"(?!\()
to '$1'
。它在更复杂的情况下(例如转义)给出了一些误报。
regex - 解析 GString 样式变量时的 Groovy 正则表达式 PatternSyntaxException
这里很时髦。我得到了一个String
带有 GString风格的变量,比如:
请记住,这不打算用作实际的 GString !!!也就是说,我不会有Groovy 将在运行时解析的 3 个字符串变量(分别为animal
和role
) 。相反,我希望对这些“目标”字符串做两件不同的事情:bodyPart
- 我希望能够
"${*}"
在目标字符串中找到这些变量 refs ( ) 的所有实例,并将其替换为?
; 和 - 我还需要找到这些变量 refs 的所有实例并获取一个列表(允许欺骗)及其名称(在上面的示例中,将是
[animal,role,bodyPart]
)
迄今为止我最好的尝试:
...在PatternSytaxException
我运行任一方法时产生:
有什么想法我会出错吗?
dictionary - 为什么 Map 不适用于 Groovy 中的 GString?
使用以下代码段,我无法gString
从地图中检索:
这怎么可能?
断言消息清楚地表明 Groovy 存在严重问题:
这与为什么 groovy 看不到字典中的某些值不是同一个问题? 那里的第一个答案表明:
您将 GString 实例添加为地图中的键,然后使用 String 实例搜索它们。
在这个问题中,我清楚地添加GString
并尝试检索GString
.
也不是为什么在地图中处理 GString 键的方式有不同的行为?在GStringImpl上使用 equals() 和 == 的 Groovy 不同的结果对我来说也有答案。我不会改变任何东西,也不会String
与GString
.