如何在groovysh中声明和使用集合数据结构?
我试过:如何在groovysh中声明和使用集合数据结构?,groovy,groovysh,Groovy,Groovysh,我试过: groovy:000> Set<String> s = ["a", "b", "c", "c"] ===> [a, b, c] groovy:000> s Unknown property: s 出现此问题的唯一原因是您正在使用GroovyShell测试代码。我不经常使用GroovyShell,但它似乎忽略了类型,例如 Set<String> s = ["a", "b", "c", "c"] 后者当然会创建一个列表。如果您在Groovy控制
groovy:000> Set<String> s = ["a", "b", "c", "c"]
===> [a, b, c]
groovy:000> s
Unknown property: s
出现此问题的唯一原因是您正在使用GroovyShell测试代码。我不经常使用GroovyShell,但它似乎忽略了类型,例如
Set<String> s = ["a", "b", "c", "c"]
后者当然会创建一个列表
。如果您在Groovy控制台中运行相同的代码,您将看到它实际上创建了一个Set
Set<String> s = ["a", "b", "c", "c"]
assert s instanceof Set
或
Groovy>=2.4.0
在groovy shell中将
explorerMode
设置为true
:set interpreterMode true
应该解决这个问题
Groovy<2.4.0将类型添加到变量会使其成为shell环境中不可用的局部变量 在
groovysh
groovy:000> s = ['a', 'b', 'c', 'c'] as Set<String>
===> [a, b, c]
groovy:000> s
===> [a, b, c]
groovy:000> s.class
===> class java.util.LinkedHashSet
groovy:000>
groovy:000>s=['a','b','c','c']作为集合
=>[a,b,c]
groovy:000>s
=>[a,b,c]
groovy:000>s.class
=>类java.util.LinkedHashSet
groovy:000>
啊,好的。所以你建议使用控制台来解决这个问题?@smilingcow是的,我不知道为什么Groovy shell会忽略这样的类型,但我倾向于使用控制台来进行此类快速测试GroovySh一点也不有趣<代码>[“a”、“b”、“c”、“c”]设置为使我的单元测试失败,但[“a”、“b”、“c”、“c”]。toSet()
工作正常。我用的是斯波克。@PatrycjaK我在斯波克也这么想,因为有一点不同:。。。当Set创建LinkedHashSet时,.toSet()创建哈希集。这打破了我的模拟,因为在生产代码中使用了一个键集,它是HashSet的祖先,但不是LinkedHashSet的祖先。你知道为什么GroovyShell似乎忽略了导致本问题中所述误解的类型吗?向变量添加一个类型会使其成为Shell环境中不可用的局部变量@多纳尔
["a", "b", "c", "c"].toSet()
["a", "b", "c", "c"] as Set
:set interpreterMode true
groovy:000> s = ['a', 'b', 'c', 'c'] as Set<String>
===> [a, b, c]
groovy:000> s
===> [a, b, c]
groovy:000> s.class
===> class java.util.LinkedHashSet
groovy:000>