为什么这个数组9的结果而不是数组的内容?

Don*_*ano 0 ruby arrays

为什么:

code3_x = []
level = 7

(level + 2).times do |i|
# This is more what I want:
# code3_x[i] << i
# This works to demonstrate:
  code3_x << i
end
Run Code Online (Sandbox Code Playgroud)

返回:

=> 9
Run Code Online (Sandbox Code Playgroud)

为什么不?

=> [0,1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)

我创建一个数组作为code3_x&我有一个值x (用i条件选择的数字替换第二个,只是i在示例中重用作为占位符)我想x在code3_x中的特定索引处插入.

注意:

我正在尝试将以下javascript翻译为ruby, 这只是一个更大功能的剪辑

if ... conditions ...{
  code3_x[i] =2;
  mod_x -= h_pow;
}else...
Run Code Online (Sandbox Code Playgroud)

更新: 这是一个链接到我试图在ruby中重新实现的整个javascript函数的要点. https://gist.github.com/therocketforever/d1dca656f4579bc5baf3

小智 5

我想你的代码中有一个拼写错误.<<没有定义code3_x[i](这是nil).code3_x[i] = i返回的版本,9因为返回值#times是您要将消息发送到的对象(在本例中(level + 2)).code3_x仍将设置:

(level + 2).times do |i|
  code3_x[i] = i
end # => 9
code3_x # => [0,1,2,3,4,5,6,7,8]
Run Code Online (Sandbox Code Playgroud)

如果需要返回值,则可以使用#map范围

(0..9).map{ |i| i * i } # => [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Run Code Online (Sandbox Code Playgroud)