找到数组的第二个元素



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

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

我做错了什么?如果我删除类Array并在第二天进行测试,它会正常工作吗?

为什么要使用*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 

为了解决您所做的错误,您编写的代码不需要splat(*)运算符(也不需要将其修补到Array类中)。虽然修补到Array并使用self可以像调用[1,2].second一样调用它,但您也可以在不修补Array的情况下按如下方式编写它:

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

它需要像second([1,2])一样被调用。

要了解更多关于splat运算符*的信息,请尝试这样的解释(我承认这是谷歌的第一个结果,但似乎还可以),但它在您的示例中所做的是将传入的数组变成数组的数组,例如[1,2,3]变成[[1,2,3]]

相关内容

  • 没有找到相关文章

最新更新