我最近遇到的图示操作的这个例子:不止一次在一边
first, *, last = 1, 2, *[3,4,5]
和它的工作。
所以我想知道,你可以在左边还是右边多次使用摔跤运算符?每次我这样做,我都会收到意想不到的明星错误,但只是想知道它的问题。
我最近遇到的图示操作的这个例子:不止一次在一边
first, *, last = 1, 2, *[3,4,5]
和它的工作。
所以我想知道,你可以在左边还是右边多次使用摔跤运算符?每次我这样做,我都会收到意想不到的明星错误,但只是想知道它的问题。
在左侧不能有多个图示。 (至少不在同一层次的嵌套。)毕竟,它意味着“吞噬所有值”,那么两个splats甚至意味着什么?这只是没有意义。
注:这样的事情当然是可能的:
a, *b, (c, *d) = [1, 2, 3, [4, 5, 6]]
两个泼溅在不同层次的嵌套,他们不互相干扰。
而就在右手边,有没有问题或者:
a = 1, 2, *[3, 4], *[5, 6]
这只是意味着扩张,而且也没有在右手边扩大多个阵列的问题。
在一侧(左侧或右侧),您可以使用图示(*
)只有一次。 first, *, last
- 在这里>,一个*
1,2,* [3,4,5] - >在这里,这是相同的
但是你可以多次使用图示运营商更多,如果你使用模式匹配(!)(不知道是否Ruby调用它的方式虽然,但在其他语言类似的功能被称为这样,所以我会用这个词):
a, *b, (*c, d) = 1, 2, 4, 5, 6, [7, 8, 9, 10, 11]
#=> [1, 2, 4, 5, 6, [7, 8, 9, 10, 11]]
a
#=> 1
b
# => [2, 4, 5, 6]
c
# => [7, 8, 9, 10]
d
# 11
正如你可以看到我用图示运营商b和C变量。这种情况下的括号是前面提到的模式匹配。 Here你可以读一点关于这个。
总结无模式匹配(()
)您可以使用它一次。
随着模式匹配,你可以一次使用它每()
(模式匹配)
PS。 *
在*[1,2,3]
不能用作分配,所以你可以用它几次:
a = *[1,2,3], *[4,5,6]
# => [1, 2, 3, 4, 5, 6]
什么语言称为模式匹配? –
@ the-tin-man例如,haskell。 –
*这样的事*我不知道怎么红宝石调用它,但在其他语言中,它被称为“模式匹配”。我在回答中写了一些关于它的信息(并将链接)。 –
@DarekNędza:Ruby称之为*并行赋值*,它是一种*解构绑定*形式。模式匹配比简单的解构绑定更*强大。 –
* bind *表示什么? –