来自“Grounded Rubyist'
的代码”module Stacklike
def stack
@stack ||=[]
end
def add_to_stack(obj)
stack.push(obj)
end
def take_from_stack
stack.pop
end
end
而不是:
class Stack
attr_reader :stack
def initialize
@stack = []
end
def add_to_stack(obj)
@stack.push(obj)
end
def take_from_stack
@stack.pop
end
end
我的主要困惑源于这样一个事实:在模块中,实例变量@stack
不在add_to_stack
和take_from_stack
方法中。如何追踪stack
的状态呢?
在课堂上,@stack
用于所有常用的方法。
有人可以在模块中解释这是如何工作的吗?
答案 0 :(得分:2)
在模块中,实例变量@stack不在add_to_stack和 take_from_stack方法。如何跟踪堆栈的状态 否则?
不完全。 add_to_stack
推送@stack
上的内容,因为stack
方法返回@stack
:
def stack
@stack ||=[]
end
def add_to_stack(obj)
stack.push(obj)
end
所以最后,add_to_stack
中使用了@stack 。
请注意,您可以安全地从@
中的所有@stack
中删除class Stack
initialize
中的分配除外),因为attr_reader :stack
定义了stack
{1}}返回@stack
的方法。