初始化后访问ruby中的varible

时间:2015-06-01 17:36:40

标签: ruby-on-rails ruby

我试图在初始化后访问ruby中的变量,但是我没有得到那个变量,那有什么不对吗?

class Test
  def initialize(params)
    @has_test = params[:has_test]
    @limit_test = params[:limit_test]
  end
  def self.method1(params)
   Test.new(params)
     #can i get that two instance variable
  end
end

2 个答案:

答案 0 :(得分:2)

您应该设置属性访问器,然后以这种方式使用它们:

class Test
  attr_accessor :has_test
  attr_accessor :limit_test

  def initialize(params)
    @has_test = params[:has_test]
    @limit_test = params[:limit_test]
  end
  def self.method1(params)
    t = Test.new(params)
    // can i get that two instance variable
    // Yes:
    //   use t.has_test and t.limit_test
  end
end

答案 1 :(得分:1)

您正在混合示例中的实例和类方法。 如果这确实是您想要的,那么您必须使用attr_reader定义一个访问者:

class Test
  def initialize(params)
    @has_test = params[:has_test]
    @limit_test = params[:limit_test]
  end
  attr_reader :has_test
  attr_reader :limit_test
  def self.method1(params)
   obj = Test.new(params)
   p obj.has_test
   p  obj.limit_test
  end
end

Test.method1(has_test: 1, limit_test: 3)

实例/类方法是一个错误,那么这个例子可以帮助你:

class Test
  def initialize(params)
    @has_test = params[:has_test]
    @limit_test = params[:limit_test]
  end
  def method1()
   p @has_test
   p @limit_test
  end
end

obj = Test.new(has_test: 1, limit_test: 3)
obj.method1

如果你在第一段代码中也定义了访问器,那么你可以再次从课外访问。

如果您不想要读者,请参阅Access instance variable from outside the class