Arrays 无法在Ruby中将数组传递给方法

Arrays 无法在Ruby中将数组传递给方法,arrays,ruby,Arrays,Ruby,所以我有这个函数 array = Array.new def put_array(array) l = array.index(array[-1]) puts l for i in 0...l do puts array[i] end end put_array([1, 2, 3, 4, 5, 6]) 输出是打印数组,但我一直得到这个结果 5 1 2 3 4 5 错误::索引输出为5,而预期输出应为6。我尝试了rindex,array.last而不是a

所以我有这个函数

array = Array.new

def put_array(array)
  l = array.index(array[-1])
  puts l
  for i in 0...l do
    puts array[i]
  end
end

put_array([1, 2, 3, 4, 5, 6])
输出是打印数组,但我一直得到这个结果

 5
 1
 2
 3
 4
 5

错误::索引输出为5,而预期输出应为6。我尝试了rindex,array.last而不是array[-1],但我一直得到相同的答案

我不确定您的预期输出是什么

但是你的错误来自这样一个事实:ruby中的数组索引是从零开始的,即它们从0开始。因此:

尽管数组有6个元素,但最后一个元素的索引是5。 这也意味着,当您开始以索引值1遍历数组时,您将从它的第二个元素开始

另一方面,使用1…l定义的是一个排他范围,即从1到l的整数范围,不包括l。如果要包含l,则需要使用1..l

您的代码的快速修复程序是:

for i in 0..l do
 puts array[i]
end
array.each {|e| puts e}
但实现相同输出的更惯用方法是:

for i in 0..l do
 puts array[i]
end
array.each {|e| puts e}

看起来有点复杂。为什么不简单呢

l = array.length
如果您简单地放置数组,它将以新行打印数组的每个元素:

array = [1, 2, 3, 4, 5, 6]
puts array
#=> Output:
1
2
3
4
5
6

def put_array(array)
  puts array
end

> put_array(array)
如果要在索引基础上执行:

> array.each_with_index {|e,i| puts array[i]}

我想你会感到困惑,因为0…5输出的数字范围是0,1,2,3,4,而不是0,1,2,3,4,5。你需要使用。。而不是在我的出发线上

这将产生:

 5
 1
 2
 3
 4
 5
 6

尽管如其他人所述,有更简单的方法可以实现相同的输出。

我不确定您是否正在尝试打印阵列,如果是的话。。您的代码可以这样修改

array = Array.new

def put_array(array)
  l = array.length
  for i in 0...l do
    puts array[i]
  end
end

put_array([1, 2, 3, 4, 5, 6])
为给定对象提供索引,因此在本例中,index-1将提供nil,因为数组不包含-1

相反,您希望执行以下操作:

array.index(6) # => 5 (6 is at index 5 of array)
array[5]       # => 6 (5th item in array is 6)    
array[-1]      # => 6 (-1th (aka last) item in the array is 6)
array.last     # => 6 (last item in array is 6)

你希望答案是什么?我们不知道结果。考虑到您的代码,此输出似乎完全合理。你想做什么/得到什么?我错了,我把索引误认为是长度……我想打印长度,所以数组。长度为我做了这项工作