Ruby主类上的实例变量

时间:2014-12-31 13:09:24

标签: ruby

请考虑以下代码:

@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,我认为该class变量应该是main

1 个答案:

答案 0 :(得分:3)

@name是一个实例变量,@@name是一个类变量。

在任何显式类定义之外定义实例变量时,隐式位于Object空间内。

➜  ~  irb
2.1.5 :001 > self.class
 => Object
2.1.5 :002 >

Object是一个对象,或多或少像一个自定义对象。因此,当您创建

@name = 'learning metaprogramming!'

实例变量@name存在于Object的范围内。方法定义发生在同一范围内,因此您可以访问实例变量。