在下面的代码段中,
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类的实例变量。
答案 0 :(得分:1)
你是正确的@@variable1
是一个类变量而@variable2
是该类的实例变量。这两个片段不相同,因为@@variable2
(仅在片段2中定义)也是一个类变量。
(注意:我假设您的irb输出有一个拼写错误,它应该包含@variable2
并且仅在调用MyClass.my_method
之后。)
答案 1 :(得分:0)
回答第一个问题: 是的,variable1和variable2 类变量
第二个问题: 以上两个片段不相同。
<强>解释强>
在第一个代码段'my_method'
中是类方法和
在第二个代码段'my_method'
中是实例方法。
以下代码段类似于第一个代码段,其中my_method
是MyClass
的类方法
class MyClass
@@variable1 = 'foo'
def self.my_method
@@variable2 = 'bar'
end
end