我在这里关注这个Ruby教程,它正在谈论堆栈和队列 http://rubymonk.com/learning/books/4-ruby-primer-ascent/chapters/33-advanced-arrays/lessons/86-stacks-and-queues#solution4117
它为堆栈提供以下代码
class Stack
def initialize
@store = Array.new
end
def pop
@store.pop
end
def push(element)
@store.push(element)
self
end
def size
@store.size
end
end
我的问题是:为什么有必要在“推”方法中返回“self”,但是我们不必返回self来说pop方法?这有什么区别?
谢谢!
答案 0 :(得分:7)
Array#push和Array#pop会返回不同的内容。第一个返回修改后的数组,第二个返回弹出元素。
您可能不想返回修改后的数组的原因是它破坏了封装并暴露了对象的内部状态。尽管如此,我们仍希望将推送调用链接起来(即Stack.new.push(2).push(5)
),因此我们返回self(类型为Stack
)而不是nil或其他内容。
答案 1 :(得分:3)
这是由于用例不同。
push
时,将其与参数element
一起使用,您进一步知道操作成功。从方法中获取element
的值是没有用的。返回值为self
使得更方便,例如允许链接方法。pop
时,在有用的情况下,你不确定数组中是否有一个元素(否则它是falis),以及你通过弹出得到的元素。并且获取弹出值是使用该方法的目的。换句话说,push
是一种“setter / modifyer”方法,而pop
是一种(破坏性的)“getter”方法。
答案 2 :(得分:2)
Ruby惯例是返回弹出时弹出的东西,以及推送时的数据结构。了解数组的行为方式。