簡體   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