0

在我的代码中尝试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
4

2 回答 2

2

为了打印实例变量,您必须使用实例的上下文访问它。

p @obj.stacks
于 2014-10-09T05:42:22.660 回答
2

Getter 和 Setter 方法

您误解了Module#attr_accessor的作用。本质上,它为您的实例变量创建 getter 和 setter 方法。在您的情况下,attr_accessor :stacks创建SetOfStacks#stacksSetofStacks#=方法。请注意,这些仍然是对象的实例方法,而不是全局变量,因此您仍然必须正确调用它们。例如:

@obj = SetOfStacks.new
@obj.stacks                # invoke your getter
@obj.stacks = { foo: nil } # invoke your setter
于 2014-10-09T05:50:50.670 回答