无法访问ruby中类外的实例变量

时间:2014-10-09 05:38:23

标签: ruby instance-variables attr-accessor

在我的代码中尝试在课堂外打印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

2 个答案:

答案 0 :(得分:2)

要打印实例变量,必须使用实例的上下文访问它。​​

p @obj.stacks

答案 1 :(得分:2)

Getter和Setter方法

你误解了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