我想知道为什么第二个解决方案有效,而第一个有链式方法的解决方案不起作用。
这个链接的方法不起作用:
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]
是最简单的解决方案
这是因为shift
和pop
都返回被删除的值:
[1, 2, 3].pop # => returns 3
[1, 2, 3].shift # => returns 1
所以当你把它们连接在一起时,你调用#pop
对#shift
的结果,这是一个不允许的Integer
。