如果有人能解释为什么输出这段代码,我将不胜感激:
*a, b = [1, 2, 3, 4]
a[b-2] + b
是7
。有谁可以请逐行分解,以便我了解这里发生了什么?这如何成为7
?
答案 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