Ruby:删除数组的第一个和最后一个元素 - 为什么解决方案以一种方式工作而不是另一种方式工作



我想知道为什么第二个解决方案有效,而第一个有链式方法的解决方案不起作用。

这个链接的方法不起作用:

nopers = [5, 6, 7, 8, 9]
class Array
  define_method(:trimy) do
    self.shift().pop()
  end
end

当我测试nopers.trim()时,它给出了一个未定义的错误消息。"method 'pop' for 1:Fixnum, in 'block in '"并且只执行。pop()方法,删除5.

但是,这个版本有效:

yuppers = [1, 2, 3, 4, 5, 6]
class Array
  define_method(:trim) do
    self.shift()
    self.pop()
  end
end
yuppers.trim()

当我测试它时,yuppers给了我:[2,3,4,5]

我想说:

yuppers[1..-2]

是最简单的解决方案

这是因为shiftpop都返回被删除的值:

[1, 2, 3].pop   # => returns 3
[1, 2, 3].shift # => returns 1

所以当你把它们连接在一起时,你调用#pop#shift的结果,这是一个不允许的Integer

相关内容

最新更新