2011-03-22 26 views
2

如果使用Ruby 1.9.2,在Ruby中,S =“富”,而s是一个String类对象,但S有没有实例变量?

s = "foo" 
s.class    # => String 
s.instance_variables # => [] 

所以sString类对象,并且由于它属于一个实现一个字符串,它是连续的字符的概念的类,所以应该有实例变量对于String类对象来存储这些信息,那么如何来instance_variables返回一个空数组?这是因为(1)它应该返回什么?它不能返回一些实例变量,而这又是一个String对象。 (2)它是“神奇”的时刻,有实例变量,但它是内部的红宝石......它的引擎盖下发生,可以考虑“魔法发生的事情” ......假设我有一个类,包含3种不同的语言短语的翻译,再有就是@french, @spanish, @latin,而这些发生在“非魔法”的水平,而实例变量将显示instance_variables

有没有一种办法,虽然打印出String类的内部实例变量?

回答

5

String是在Ruby中的基本类型。正如你所说的,它是没有意义的Ruby,露出内部实现,因为这里是没有办法对Ruby的数据呈现给你,除非另一个String

这同样适用于其他基本类型:

> 3.instance_variables 
=> [] 

没有任何手段或理由的内部实现暴露给你。

相关问题