[英]NoMethodError: undefined method `-' for nil:NilClass
我試圖返回一個將每個元素平方的數組,但是出現以下錯誤?
1) #square_array should square the elements in an array
Failure/Error: expect(square_array([9,10,16,25])).to eq([81,100,256,625])
NoMethodError:
undefined method `-' for nil:NilClass
# ./square_array.rb:3:in `block in square_array'
# ./square_array.rb:2:in `each'
# ./square_array.rb:2:in `square_array'
# ./spec/square_array_spec.rb:19:in `block (2 levels) in <top (required)>'
Finished in 0.03363 seconds (files took 0.30161 seconds to load)
但是僅當是兩位數數字時才會出現此問題。以下Ruby代碼與array = [1,2,3]一起使用。 為什么它不能使用兩位數的數字?
def square_array(array)
array.each do |x|
array[x-1] = x ** 2
end
end
您出錯的原因是這一行,
array[x-1] = x ** 2
每個方法都會針對自身中的每個元素調用給定的塊一次,並將該元素作為參數傳遞。 因此,當您使用[1,2,3]時, x-1
返回0,1,2,這是可以的。 但是,當您使用[9,10,16,25]時,它將返回8,9,15,24,這絕對不是數組索引。
您可以使用這樣的map
來做到這一點,
def square_array(array)
array.map{|x| x ** 2}
end
要了解有關map
工作原理的更多信息,請在此處查看 。
或者,您可以使用each_with_index
,
def square_array(array)
array.each_with_index {|x, index| array[index] = x ** 2}
end
如果您真的只想使用each
(雖然不推薦)
def square_array(array)
i = 0
array.each do |x|
array[i] = x ** 2
i+=1
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.