【发布时间】:2017-12-08 15:13:19
【问题描述】:
如果有人能解释为什么这段代码的输出,我将不胜感激:
*a, b = [1, 2, 3, 4]
a[b-2] + b
是7。有人可以逐行分解它,以便我了解这里发生了什么吗?这怎么变成7?
【问题讨论】:
标签: ruby
如果有人能解释为什么这段代码的输出,我将不胜感激:
*a, b = [1, 2, 3, 4]
a[b-2] + b
是7。有人可以逐行分解它,以便我了解这里发生了什么吗?这怎么变成7?
【问题讨论】:
标签: ruby
通过在 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
【讨论】:
*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 +-----------------------+
【讨论】:
*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
【讨论】:
当你像这样分配数组时,
*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 控制台并逐行运行。
【讨论】:
要逐行分解任何内容,可以使用 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 数组。)而 b 仍然是 4。
3 + 4
#⇒ 7
【讨论】: