Ruby实例变量何时设置?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)
class Hello
@hello = "hello"
    def display
        puts @hello
    end
end

h = Hello.new
h.display

我创建了上面的类。它不输出任何东西。我认为实例变量@hello是在类声明期间设置的。但是当我调用显示方法时,输出是'零'。什么是正确的方法来做到这一点?

提问于
用户回答回答于

Ruby中的实例变量在第一次学习Ruby时可能会有点混乱,特别是如果习惯于另一种面向Java的语言。

不能简单地声明一个实例变量。

class Hello
  def create_some_state
    @hello = "hello"
  end
end

h = Hello.new
p h.instance_variables 

h.create_some_state
p h.instance_variables

# Output
[]
["@hello"]

可以使用该方法Object#instance_variables列出对象的所有实例变量。

通常在initialize方法中“声明”并初始化所有实例变量。清楚记录哪些实例变量应公开可用的另一种方法是使用模块方法attr_accessor(读取/写入),attr_writer(写入)和attr_reader(读取)。这些方法将为列出的实例变量综合不同的访问器方法。

class Hello
  attr_accessor :hello
end

h = Hello.new
p h.instance_variables 

h.hello = "hello"
p h.instance_variables

# Output
[]
["@hello"]

实例变量在分配给使用合成Hello#hello=方法之前,仍然不会创建。

用户回答回答于

你需要添加一个initialize方法:

class Hello
    def initialize
        @hello = "hello"
    end
    def display
        puts @hello
    end
end

h = Hello.new
h.display

扫码关注云+社区