Rails和类变量

Ale*_*dre 5 ruby

class MainController < ApplicationController

  @my_var = 123
   def index
    var1 = @my_var
   end

   def index2
    var2 = @my_var
   end
end
Run Code Online (Sandbox Code Playgroud)

为什么两者var1都不var2相等123

Fro*_*ost 22

变量@是ruby中的实例变量.如果你正在寻找类变量,它们是前缀的@@,所以你应该使用它@@my_var = 123.

而且你不能以这种方式使用实例变量的原因是因为如果你在方法之外定义实例变量,它们与你的方法不在同一个范围内,而只在你的类被解释时才存在.

var1在您的示例中是局部变量,该变量仅在index方法内可见.

例子:

class Foo
  @@class_variable = "I'm a class variable"

  def initialize
    @instance_variable = "I'm an instance variable in a Foo class"
    local_variable = "I won't be visible outside this method"
  end

  def instance_method_returning_an_instance_variable
    @instance_variable
  end

  def instance_method_returning_a_class_variable
    @@class_variable
  end

  def self.class_method_returning_an_instance_variable
    @instance_variable
  end

  def self.class_method_returning_a_class_variable
    @@class_variable
  end
end

Foo.new
=> #<Foo:0x007fc365f1d8c8 @instance_variable="I'm an instance variable in a Foo class">
Foo.new.instance_method_returning_an_instance_variable
=> "I'm an instance variable in a Foo class"
Foo.new.instance_method_returning_a_class_variable
=> "I'm a class variable"
Foo.class_method_returning_an_instance_variable
=> nil
Foo.class_method_returning_a_class_variable
=> "I'm a class variable"
Run Code Online (Sandbox Code Playgroud)

  • `@ var`是一个实例变量,它将在类的实例中的所有方法中可见.`var`是一个局部变量,只在定义的范围内可见. (2认同)