ruby-on-rails - 为什么我不能访问 ruby​​ 中的实例变量?

标签 ruby-on-rails ruby

好的,我有这个简单的类

class Test
  @var = 99

  def initialize(var2)
    @var2 = var2
  end 

  attr_reader :var, :var2
end

> t = Test.new(100)
 => #<Test:0x007f9b8118ac30 @var2=100> 
> t.var2
 => 100 
> t.var
 => nil 

为什么最后一个 t.var 语句返回 nil 而我希望它返回 99 因为类顶部的 @var = 99。也许我对范围的想法不是 100 正确......关于这个的任何想法

最佳答案

查看代码中的注释。

class Test
  @var = 99 # self is Test class at this point. You're defining 
            # an instance variable on a class instance.

  def initialize(var2)
    @var2 = var2 # This is normal instance variable.
  end 

  attr_reader :var, :var2
end

t = Test.new(100)
t.var # => nil
t.var2 # => 100

# don't bother with creating an accessor and get the ivar from Test directly.
Test.instance_variable_get(:@var) # => 99

关于ruby-on-rails - 为什么我不能访问 ruby​​ 中的实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12333285/

相关文章:

Ruby:中文解析时间

ruby-on-rails - Bundler 正在从 Gemfile.lock 中删除 RUBY VERSION

ruby-on-rails - rails 加入多态关联

ruby-on-rails - Rails 中的日期/时间比较

ruby-on-rails - 如何为临时文件设置内容类型

ruby-on-rails - 带有常量的 haml select_tag

ruby-on-rails - Rails Accepts_nested_attributes_for 与 has_one 关联问题

ruby 彩虹/ unicorn 开始 faye and rails

ruby-on-rails - 我如何断言 Cucumber 中模型的存在?

ruby - 如何在 activeadmin 下拉菜单中显示模型标题而不是#<Mymodel :0x000000. ..>?