在Groovy中进行一些数据驱动的测试时遇到了一些奇怪的事情.如果重要,这是在Spock测试中.
我认为这是列表应该工作的方式:
def list = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
println list[0]
Run Code Online (Sandbox Code Playgroud)
生产:
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我不小心做了这样的事情:
def whut = [[1, 2, 3]
[4, 5, 6]
[7, 8, 9]]
println whut[0]
println whut
Run Code Online (Sandbox Code Playgroud)
哪个输出:
[null, null, null]
[[null, null, null]]
Run Code Online (Sandbox Code Playgroud)
好吧,我可以看到Groovy不喜欢没有逗号的声明 - 但它编译,所以这是什么?
以下是关于这种语法的真正原因:
def inputz = [
[1, 0.631226308, 0.631226308, 0.631226308, 1, 0, 0.240426243]
[1, 0.312284518, 0.312284518, 0.312284518, 1, 1, 1 ]
[3, 0.823506476, 0.31230335, 0.631237191, 1, 1, 0 ]
[4, 0.934875788, 0.486395986, 0.66732053, 3, 2, 0.927654169]
[4, 0.699869773, 0.234328294, 0.424739329, 3, 3, 1 ]
]
println inputz[0]
println inputz
Run Code Online (Sandbox Code Playgroud)
产生以下结果:
[0.631226308, 1, 1, 1, 1, 1, 1]
[[0.631226308, 1, 1, 1, 1, 1, 1]]
Run Code Online (Sandbox Code Playgroud)
我完全迷失在这里 - 我正在创建的Groovy构造是什么,为什么它从我的列表中输出这些看似随机的值?
谢谢,如果你想到我的问题更具描述性的名字,我会改变它.
tim*_*tes 10
所以
def whut = [[1, 2, 3]
[4, 5, 6]
[7, 8, 9]]
Run Code Online (Sandbox Code Playgroud)
创建一个列表[1,2,3],访问元素4,5和6(不存在)以提供三个空值的列表,然后访问此空值列表的元素7,8和9(同样返回三个空值)
然后它将这个三个空值列表包装在一个列表中
有了这个例子:
[1, 0.631226308, 0.631226308, 0.631226308, 1, 0, 0.240426243]
[1, 0.312284518, 0.312284518, 0.312284518, 1, 1, 1 ]
....
Run Code Online (Sandbox Code Playgroud)
它深入到:
[1, 0.631226308, 0.631226308, 0.631226308, 1, 0, 0.240426243]
[1, 0, 0, 0, 1, 1, 1]
Run Code Online (Sandbox Code Playgroud)
给第1,第0,第0,第0,第1,第1和第1,最后得到
[0.631226308, 1, 1, 1, 0.631226308, 0.631226308, 0.631226308]
Run Code Online (Sandbox Code Playgroud)
等等等等.
将其分解为一个较小的例子(在groovysh中):
> [[1,2][3,4]]
===> [[null, null]]
Run Code Online (Sandbox Code Playgroud)
但是我们不需要额外的数组,所以我们可以解开这个:
> [1,2][3,4]
===> [null, null]
Run Code Online (Sandbox Code Playgroud)
这实际上是一种列表索引,通常如下所示:
> [1,2][1]
===> 2
Run Code Online (Sandbox Code Playgroud)
但是如果我们索引数组的结尾:
> [1,2][2]
===> null
Run Code Online (Sandbox Code Playgroud)
事实证明,groovy支持切片作为此语法的一部分(有关更多示例,请参阅http://groovy-lang.org/groovy-dev-kit.html#Collections-Slicingwiththesubscriptoperator),因此我们可以:
> [1,2,3][2,0]
===> [3, 1]
Run Code Online (Sandbox Code Playgroud)
获得第三个元素后跟第一个元素.
但结合这两个事实:
> [1,2][3,4]
===> [null, null]
Run Code Online (Sandbox Code Playgroud)
我们再次索引超过数组的末尾,但是使用切片,给我们两个空值.
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |