【问题标题】:`indexOf` returns unexpected result on list of groovy.Gstrings`indexOf` 在 groovy.Gstrings 列表上返回意外结果
【发布时间】:2021-09-02 17:39:12
【问题描述】:

在 Gstring 列表上运行 indexOf 时,返回值始终为 -1,尽管预期的索引匹配:

mystr = "foo"

// expect .indexOf to return 0
println "${["${mystr}_bar", "baz"].indexOf("foo_bar")}" // -1
println "${[mystr + "_bar", "baz"].indexOf("foo_bar")}" // ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​0​​​​​​​​​​​​​​

是我误解了什么还是这是一个错误?

【问题讨论】:

    标签: groovy indexof gstring


    【解决方案1】:

    你必须使用:

    ["${mystr}_bar".toString(), "baz"].indexOf("foo_bar")
    // or if you have many: ["${mystr}_bar", "baz"]*.toString().indexOf("foo_bar")
    

    (注意那里明确的.toString())。

    GString 看起来一样(例如,他们 .toString() 到他们当前的状态) 像String,但不是。例如。你可以在里面有一个封闭 GString 或生成随机数的调用。他们不是 像他们的 String 兄弟一样不可变或“稳定”。那例如也是 原因,为什么它们不适合作为地图中的键。所以他们等于 相同,但它们散列不同。

    【讨论】:

    • 谢谢,再读一读,我猜这是因为.indexOf 在内部使用.equals。我偶然发现["${mystr}_bar", "baz"].findIndexOf{it -> it == "foo_bar"} 有效。现在我已经阅读了==.equals.compareTo.is 之间的区别,这更有意义!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-05
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多