繁体   English   中英

无法在Ruby中的类之外访问实例变量

[英]Unable to access instance variable outside the class in ruby

在我的代码中,尝试在类外打印p @stack ,尽管放置了attr_accessor :stacks, :each_stack_size, :stack_number但它显示nil 像往常一样,它在类中使用时可以正常工作并显示数据。 我想念什么?

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

为了打印实例变量,必须使用实例的上下文对其进行访问。

p @obj.stacks

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM