考虑以下代码:
@name = 'learning metaprogramming!'
def cap
@name.upcase # Was expecting to require @@name as the scopes are different like in a class
end
cap # => "LEARNING METAPROGRAMMING!"有人能解释一下,为什么我能够访问@name,我认为它应该是main的class变量。
发布于 2014-12-31 13:16:39
@name是一个实例变量,@@name是一个类变量。
当在任何显式类定义之外定义实例变量时,隐式地在Object空间中。
➜ ~ irb
2.1.5 :001 > self.class
=> Object
2.1.5 :002 >Object是一个对象,或多或少类似于一个自定义对象。因此,当您创建
@name = 'learning metaprogramming!'实例变量@name存在于Object的作用域中。方法定义发生在相同的范围内,因此可以访问实例变量。
https://stackoverflow.com/questions/27721613
复制相似问题