在Ruby中,s =“foo”,s是String类对象,但s没有实例变量?

时间:2011-03-22 14:18:35

标签: ruby

如果使用Ruby 1.9.2,

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

所以s是一个String类对象,因为它属于一个实现字符串概念的类,它是连续的字符,所以应该有String类对象的实例变量存储这些信息,那么instance_variables如何返回一个空数组呢?是因为(1)它应该返回什么?它不能返回一些实例变量,而后者又是一个String对象。 (2)它是“神奇的”时刻,有实例变量,但它是Ruby的内部......它发生在引擎盖下并且可以认为它“通过魔法发生”...假设我有一个类包含3种不同语言的短语翻译,然后有@french, @spanish, @latin,这些都发生在“非魔法”级别,实例变量将显示instance_variables

有没有办法打印出String类的内部实例变量?

1 个答案:

答案 0 :(得分:5)

String是Ruby中的基本类型。正如你所说,Ruby暴露内部实现是没有意义的,因为除了另一个String之外,Ruby无法向你呈现数据。

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

> 3.instance_variables
=> []

没有办法或理由向您公开内部实施。