繁体   English   中英

找到数组的第二个元素

[英]Find the 2nd element of array

我不明白这是怎么回事。 该程序应该在类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

我究竟做错了什么? 如果我删除类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运算符*更多信息,请尝试类似这样的解释 (我承认 - 第一个Google结果,但似乎没问题),但它在您的示例中所做的是将传入的数组转换为数组的数组 -例如[1,2,3]变为[[1,2,3]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM