这个 Groovy 结构是做什么的,语法是如何工作的?
What is this Groovy construct do, and how does the syntax work?
在 Groovy 中进行一些数据驱动测试时,我 运行 陷入了困境 运行ge。如果重要的话,这是在 Spock 测试中。
我认为列表应该是这样工作的:
def list = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
println list[0]
产生:
[1, 2, 3]
我不小心做了这样的事情:
def whut = [[1, 2, 3]
[4, 5, 6]
[7, 8, 9]]
println whut[0]
println whut
输出:
[null, null, null]
[[null, null, null]]
好的,我可以看到 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
产生以下结果:
[0.631226308, 1, 1, 1, 1, 1, 1]
[[0.631226308, 1, 1, 1, 1, 1, 1]]
我完全迷失在这里 - 我正在创建的 Groovy 结构是什么,为什么它从我的列表中输出这些看似 运行dom 的值?
谢谢,如果您为我的问题想出更具描述性的名称,我会更改它。
所以
def whut = [[1, 2, 3]
[4, 5, 6]
[7, 8, 9]]
创建一个列表 [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 ]
....
它深入到:
[1, 0.631226308, 0.631226308, 0.631226308, 1, 0, 0.240426243]
[1, 0, 0, 0, 1, 1, 1]
给出第 1、0、0、0、1、1 和 1,最后得到
[0.631226308, 1, 1, 1, 0.631226308, 0.631226308, 0.631226308]
等等等等。
将其分解为一个更小的示例(在 groovysh 中):
> [[1,2][3,4]]
===> [[null, null]]
但是我们不需要额外的数组,所以我们可以展开这个:
> [1,2][3,4]
===> [null, null]
这实际上是一种列表索引,通常是这样的:
> [1,2][1]
===> 2
但是如果我们索引数组的末尾:
> [1,2][2]
===> null
事实证明,groovy 支持切片作为此语法的一部分(有关更多示例,请参见 http://groovy-lang.org/groovy-dev-kit.html#Collections-Slicingwiththesubscriptoperator),因此我们可以:
> [1,2,3][2,0]
===> [3, 1]
获取第 3 个元素后跟第一个元素。
但结合这两个事实:
> [1,2][3,4]
===> [null, null]
我们再次索引到数组的末尾,但是有一个切片,给我们两个空值。
在 Groovy 中进行一些数据驱动测试时,我 运行 陷入了困境 运行ge。如果重要的话,这是在 Spock 测试中。
我认为列表应该是这样工作的:
def list = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
println list[0]
产生:
[1, 2, 3]
我不小心做了这样的事情:
def whut = [[1, 2, 3]
[4, 5, 6]
[7, 8, 9]]
println whut[0]
println whut
输出:
[null, null, null]
[[null, null, null]]
好的,我可以看到 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
产生以下结果:
[0.631226308, 1, 1, 1, 1, 1, 1]
[[0.631226308, 1, 1, 1, 1, 1, 1]]
我完全迷失在这里 - 我正在创建的 Groovy 结构是什么,为什么它从我的列表中输出这些看似 运行dom 的值?
谢谢,如果您为我的问题想出更具描述性的名称,我会更改它。
所以
def whut = [[1, 2, 3]
[4, 5, 6]
[7, 8, 9]]
创建一个列表 [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 ]
....
它深入到:
[1, 0.631226308, 0.631226308, 0.631226308, 1, 0, 0.240426243]
[1, 0, 0, 0, 1, 1, 1]
给出第 1、0、0、0、1、1 和 1,最后得到
[0.631226308, 1, 1, 1, 0.631226308, 0.631226308, 0.631226308]
等等等等。
将其分解为一个更小的示例(在 groovysh 中):
> [[1,2][3,4]]
===> [[null, null]]
但是我们不需要额外的数组,所以我们可以展开这个:
> [1,2][3,4]
===> [null, null]
这实际上是一种列表索引,通常是这样的:
> [1,2][1]
===> 2
但是如果我们索引数组的末尾:
> [1,2][2]
===> null
事实证明,groovy 支持切片作为此语法的一部分(有关更多示例,请参见 http://groovy-lang.org/groovy-dev-kit.html#Collections-Slicingwiththesubscriptoperator),因此我们可以:
> [1,2,3][2,0]
===> [3, 1]
获取第 3 个元素后跟第一个元素。
但结合这两个事实:
> [1,2][3,4]
===> [null, null]
我们再次索引到数组的末尾,但是有一个切片,给我们两个空值。