在 Ruby 中,为什么插入分配给数组索引 return 的变量未定义?
In Ruby, why does plugging in a variable assigned to an array index return undefined?
我正在学习Ruby,刚刚解决了这个金字塔问题。无论出于何种原因,我试图将 twoD[0]
更改为变量 twoDidx
(见第三行)。
但是,当我尝试用 while twoDidx.length != 1
替换 while twoD[0].length != 1
时,我得到“未定义”。我不了解变量的工作原理是什么?谢谢。
def pyramid_sum(base)
twoD = [base]
twoDidx = twoD[0]
while twoD[0].length != 1
arr = twoD[0].map.with_index do |num, idx|
if idx != twoD[0].length - 1
num + twoD[0][idx + 1]
end
end
arr = arr.compact
twoD.unshift(arr)
end
return twoD
end
print pyramid_sum([1, 4, 6]) #=> [[15], [5, 10], [1, 4, 6]]
twoDidx
和twoD[0]
有很大的区别。 twoDidx
是对 twoD
的第一个元素的引用 在您进行赋值时 而 twoD[0]
是对 [ 的第一个元素的引用=14=]执行时的数组。
为了让它更明显:
array = [1]
first = array[0] # Here you just assign 1 to the variable
array = [100]
first #=> 1
array[0] #=> 100
我正在学习Ruby,刚刚解决了这个金字塔问题。无论出于何种原因,我试图将 twoD[0]
更改为变量 twoDidx
(见第三行)。
但是,当我尝试用 while twoDidx.length != 1
替换 while twoD[0].length != 1
时,我得到“未定义”。我不了解变量的工作原理是什么?谢谢。
def pyramid_sum(base)
twoD = [base]
twoDidx = twoD[0]
while twoD[0].length != 1
arr = twoD[0].map.with_index do |num, idx|
if idx != twoD[0].length - 1
num + twoD[0][idx + 1]
end
end
arr = arr.compact
twoD.unshift(arr)
end
return twoD
end
print pyramid_sum([1, 4, 6]) #=> [[15], [5, 10], [1, 4, 6]]
twoDidx
和twoD[0]
有很大的区别。 twoDidx
是对 twoD
的第一个元素的引用 在您进行赋值时 而 twoD[0]
是对 [ 的第一个元素的引用=14=]执行时的数组。
为了让它更明显:
array = [1]
first = array[0] # Here you just assign 1 to the variable
array = [100]
first #=> 1
array[0] #=> 100