【问题标题】:Find the 2nd element of array查找数组的第二个元素
【发布时间】:2015-01-08 18:13:46
【问题描述】:

我不明白这是怎么回事。该程序应该在类 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 并在第二个测试它工作正常吗?

【问题讨论】:

  • 看起来你没有在任何地方调用方法second
  • 那么我该怎么做,因为我到目前为止所尝试的只是一直说 NoMethodError

标签: ruby arrays class instance-methods splat


【解决方案1】:

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

【讨论】:

  • 那行得通。我真的不知道自己是什么。我对 Ruby 很陌生,对 Ruby 的类表示法也很陌生,哈哈谢谢
  • 不客气,我看到您在这里提出了几个问题,如果您发现某个特定答案有用,最好单击左侧的复选框接受它。
【解决方案2】:

为了回答您做错的事情,您编写的代码不需要 splat (*) 运算符(它也不需要修补到 Array 类中)。虽然修补到Array 并使用self 允许您像[1,2].second 一样调用它,但您也可以编写如下而不修补到Array

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

需要像 second([1,2]) 这样调用。

要了解有关 splat 运算符 * 的更多信息,请尝试 this explanation 之类的操作(我承认 - 第一个 Google 结果,但看起来还不错),但它在您的示例中所做的是将您传入的数组转换为数组的数组 - 例如[1,2,3] 变为 [[1,2,3]]

【讨论】:

  • 第二个方法必须在类数组中定义。骨架类Array;结束了
猜你喜欢
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多