这些类变量?

时间:2013-08-04 18:57:25

标签: ruby class-variables

在下面的代码段中,

class MyClass
  class << self    
    @@variable1 = 'foo'

    def my_method
      @variable2 = 'bar'
    end
  end
end

@@variable1@variable2类变量吗?换句话说,上面的代码段与此相当:

 class MyClass
    @@variable1 = 'foo'

    def self.my_method
      @@variable2 = 'bar'
    end
 end

EDITED

@suvankar,谢谢你的回答。第二个片段是一个拼写错误,我编辑它包括'自我'。我实际上并不完全确定在第一个片段中,variable2是一个类变量。例如,如果我将第一个片段加载到irb中,并键入:

  >> MyClass.class_variables
  => [@@variable1]

  >> MyClass.instance_variables
  => [@variable2]

所以看起来变量1是一个类变量(这并不奇怪)。但是variable2是MyClass类的实例变量。

2 个答案:

答案 0 :(得分:1)

你是正确的@@variable1是一个类变量而@variable2是该类的实例变量。这两个片段不相同,因为@@variable2(仅在片段2中定义)也是一个类变量。

(注意:我假设您的irb输出有一个拼写错误,它应该包含@variable2并且仅在调用MyClass.my_method之后。)

答案 1 :(得分:0)

回答第一个问题: 是的,variable1和variable2 类变量

第二个问题: 以上两个片段不相同。

<强>解释

在第一个代码段'my_method'中是类方法和 在第二个代码段'my_method'中是实例方法

以下代码段类似于第一个代码段,其中my_methodMyClass的类方法

class MyClass
    @@variable1 = 'foo'

    def self.my_method
      @@variable2 = 'bar'
    end
 end