在我的代码中尝试在课堂外打印p @stack
时,尽管放nil
,它仍显示attr_accessor :stacks, :each_stack_size, :stack_number
。像往常一样,它工作正常,并在课堂内使用时显示数据。我错过了什么?
class SetOfStacks
attr_accessor :stacks, :each_stack_size, :stack_number
# Initializing Hash to hold all the stacks and initial stack is created.
def initialize
@stacks = Hash.new # declaring hash to hold all stacks
@each_stack_size = 3 # defining each stack size
@stack_number = 1 # Current stack number
@stacks[@stack_number] = Array.new
end
...
...
end
@obj = SetOfStacks.new
@obj.push(4)
@obj.push(5)
@obj.push(6)
@obj.push(7)
@obj.pop
p @stacks
答案 0 :(得分:2)
要打印实例变量,必须使用实例的上下文访问它。
p @obj.stacks
答案 1 :(得分:2)
你误解了Module#attr_accessor的作用。本质上,它为您的实例变量创建getter和setter方法。在您的情况下,attr_accessor :stacks
创建 SetOfStacks#stacks 和 SetofStacks#= 方法。请注意,这些仍然是对象的实例方法,而不是全局变量,因此您仍然必须正确调用它们。例如:
@obj = SetOfStacks.new
@obj.stacks # invoke your getter
@obj.stacks = { foo: nil } # invoke your setter