数组方程解释

时间:2017-07-05 05:54:24

标签: ruby

如果有人能解释为什么输出这段代码,我将不胜感激:

*a, b = [1, 2, 3, 4]
a[b-2] + b

7。有谁可以请逐行分解,以便我了解这里发生了什么?这如何成为7

5 个答案:

答案 0 :(得分:2)

要逐行删除任何内容,可以使用REPL:

*a, b = [1, 2, 3, 4]
#⇒ [1, 2, 3, 4]

a
#⇒ [1, 2, 3]

b
#⇒ 4

使用splat运算符,我们将原始数组分解为新数组和单个值。现在一切都非常清晰:a[b-2] a[2],而3依次为a(检查4数组。)而b仍为3 + 4 #⇒ 7

{{1}}

答案 1 :(得分:2)

*a, b = [1, 2, 3, 4]表示a = [1,2,3]b = 4当您执行a[b-2] + b时它将是

                +-----------------------+
a[b-2]   + b    |        a[2]           |
a[4-2]   + 4    |          |            |
a[2]     + 4    |  a[1, 2, 3]           |
3        + 4    |    0  1  2 -> index   |
= 7             +-----------------------+

答案 2 :(得分:2)

分配这样的数组时,

*a, b = [1, 2, 3, 4]

然后它将分配

a = [1,2,3]

b = 4

现在,当您尝试打印a[b-2] + b

a[b - 2] = 3
b = 4
3 + 4 = 7

为了更多的理解,使用rails console并逐行运行。

答案 3 :(得分:2)

*a, b = [1, 2, 3, 4]

a
 => [1, 2, 3] 

b
 => 4 

a[b-2] // b-2 = 2 find value at index of 2 in a, like a[2] is 3
 => 3 

a[b-2]+b
 => 7 

答案 4 :(得分:1)

通过使用 a 上的splat运算符,我们基本上是让 a 收集 b 不需要的所有其他数字。因此, b 从数组中获取一个数字,而 a 则获取剩余的所有内容。

b = 4 

a = [1,2,3]

现在,当我们这样做时:

a[b-2] + b

它翻译为:

a[4-2] + 4 

a[2] + 4

现在,我们检查数组 a 中位置2的数字。

3 + 4 = 7