查找数组的第二个元素

use*_*773 3 ruby arrays class splat instance-methods

我不明白这怎么行不通。该程序应该采用 Array 类中的第二个实例方法并返回数组中的第二个对象

class Array
  def second(*arr)
  arr.length <= 1 ? nil : arr[1]
  end
end

#Test cases
Test.assert_equals(Array([1, 2, 3]), 2,) #Getting nil
Test.assert_equals(Array([]), nil) #passes
Test.assert_equals(Array([1]), nil) #passes
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?如果我删除类数组并在第二个测试它工作正常吗?

dar*_*mkd 5

为什么使用*arr?如果您要进行猴子修补Array,请使用self

class Array
  def second
    self.length <= 1 ? nil : self[1]
  end
end

p [1,2,3].second #=> 2
p [1].second #=> nil
p [].second #=> nil 
Run Code Online (Sandbox Code Playgroud)