在rails上的控制器ruby中的全局中定义时访问实例变量

时间:2014-03-30 13:57:20

标签: ruby-on-rails ruby

这里我将实例变量声明为全局变量。在输入语句中,我没有得到输出"home/abc.txt"。访问实例变量输入的语法是什么?

class AbcController
  @filename = 'home/abc.txt'  

  def querypass
    puts @filename
  end

  ...
end

1 个答案:

答案 0 :(得分:2)

当这样声明时,@filename asssignment在类的上下文中运行,并且被称为类实例变量。 querypass方法在类实例上定义,无法访问它。您可能想要做的是:

class AbcController

  def initialize 
    @filename = 'home/abc.txt'
  end

  def querypass
    puts @filename
  end

  ...
end

在这种情况下,每个实例都有自己的变量副本,每个实例都以相同的初始值开头。但是,如果您真的想要为整个班级设置一个变量,您可以这样做:

class AbcController
  class << self
    attr_accessor :filename  # or attr_reader
  end
  @filename = 'home/abc.txt'  

  def querypass
    puts self.class.filename
  end

  ...
end

或者,如果您不想创建任何类设置器或阅读器:

class AbcController
  @filename = 'home/abc.txt'  

  def querypass
    puts self.class.instance_variable_get(:@filename)
  end

  ...
end