0

在下面的片段中,

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

已编辑

@suvankar,感谢您的回答。第二个片段是一个错字,我对其进行了编辑以包含“自我”。我实际上并不完全确定在第一个片段中,variable2 是一个类变量。例如,如果我将第一个片段加载到 irb,然后键入:

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

  >> MyClass.instance_variables
  => [@variable2]

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

4

2 回答 2

1

您是正确的,它@@variable1是一个类变量并且@variable2是该类的一个实例变量。这两个片段不等效,因为@@variable2(仅在片段二中定义)也是一个类变量。

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

于 2013-08-04T21:45:20.653 回答
0

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

第二个问题: 以上两个片段不一样。

解释:

第一个片段'my_method'类方法,第二个片段'my_method'实例方法

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

class MyClass
    @@variable1 = 'foo'

    def self.my_method
      @@variable2 = 'bar'
    end
 end
于 2013-08-04T19:58:13.247 回答