存储在Ruby中的变量的值在哪里?

时间:2016-04-30 23:48:35

标签: ruby

我了解到在Ruby中,对象只是一堆实例变量和类的链接(Metaprogramming Ruby 2,The Pragmatic Bookshelf)。

当我创建一个变量时,我创建一个类的实例并为其赋值。我认为这个值作为实例变量存储在对象中是错误的吗?当我调用instance_variables时,没有出现。例如:

str = "hello"          # => "hello"
str.class              # => String
str.instance_variables # => []

如果str是一个对象并且它等于"hello",那么"hello"存储在哪里?

3 个答案:

答案 0 :(得分:2)

变量不是对象。它是一种编程语言构造,提供了一种在源代码中引用对象的方法。

例如,在下面的代码中,b的初始化创建一个新对象,只创建一个引用对象的新变量:

2.3.0 :012 > a = 'a string'
 => "a string"
2.3.0 :013 > b = a
 => "a string"

答案 1 :(得分:0)

正如Jan所指出的,某些Ruby类是特殊的。这意味着内部是用C实现的,而不是Ruby,所以它们对于通常的反射工具是不可见的。

您可以查看Ruby source内部,看看它是如何发挥作用的。

在string的情况下,没有存储字符串的实例变量,字符串本身存储的位置。

答案 2 :(得分:0)

您所做的局部变量str不是实例变量。

如果创建实例变量,那么它将存储在对象中。但是,对变量本身调用instance_variables是没有意义的。您应该在存储它的对象上调用它(在这种情况下是隐式主上下文)。

@str = "hello"
instance_variables # => [:@str]