Ruby主类上的实例变量
考虑以下代码:Ruby主类上的实例变量,ruby,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,我想它应该是main@name的类变量,而@name是一个实例变量,@@
@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
@name
的类变量,而@name
是一个实例变量,@@name
将是一个类变量
在任何显式类定义之外定义实例变量时,隐式地位于对象
空间内
➜ ~ irb
2.1.5 :001 > self.class
=> Object
2.1.5 :002 >
对象
是一个对象,或多或少类似于自定义对象。因此,当您创建
@name = 'learning metaprogramming!'
实例变量@name
存在于对象的范围内。方法定义发生在同一范围内,因此您可以访问实例变量。那么什么是方法cap
?它是Object
的实例方法还是类方法?不,@name
不存在于Object
的范围内,它存在于main
@JörgWMittag的范围内。我知道,这就是为什么我在对象的范围内而不是在对象的范围内使用的原因。如果你感到困惑,请随意重新表述。我相信我们的意思是一样的,只是可能缺乏英语沟通技巧@JikkuJosecap
是Object
@MarekLipka的私有实例方法,听起来很有意义;但我只是发现它令人困惑,因为方法的内部和外部如何具有相同的范围。定义方法的行为不会将self
更改为当前范围的实例范围吗?