[英]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.