我不明白这是如何运作的。该程序应该在类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并在第二次测试它可以正常工作吗?
答案 0 :(得分:3)
为什么要使用*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
答案 1 :(得分:0)
为了回答您的错误,您编写的代码不需要splat(*
)运算符(它也不需要修补{ {1}}类)。虽然修补Array
并使用Array
允许您将其称为self
,但您也可以按照以下方式编写,而无需修补[1,2].second
:
Array
需要像def second(arr)
arr.length <= 1 ? nil : arr[1]
end
一样调用。
要了解有关splat运算符second([1,2])
的更多信息,请尝试类似this explanation的内容(我承认 - Google的第一个结果,但似乎没问题),但它在您的示例中做了什么将传入的数组转换为数组的数组 - 例如*
变为[1,2,3]
。