1

我正在学习 Ruby 并开设了一个课程来帮助:

class WhatImDoing
    def initialize
        puts "not doing anything"
    end
end

输出:

not doing anything
#<WhatImDoing:0xb74b14e8>

我很好奇,第二行是什么?它是我创建的 WhatImDoing 对象的参考位置吗?我可以通过这个位置访问对象(如指针或其他东西)吗?等等......只是想更好地理解Ruby,一般来说。

谢谢。

4

3 回答 3

7

第二行是 的输出irb,显示最后一条语句的返回值。

如果您设置的值等于该值:

> class WhatImDoing
    def initialize
      puts "not doing anything"
    end

    def ohai
      puts "Ohai"
    end
  end
> tmp = WhatImDoing.new
=> #<WhatImDoing:0x5cd5a2a9>

你可以使用它:

> tmp.ohai
Ohai

如果您有自定义to_s,它将显示:

> class WhatImDoing
    def to_s
      "#{super} kthxbai"
    end
  endt
> tmp = WhatImDoing.new
=> #<WhatImDoing:0x3e389405> kthxbai 
于 2013-02-22T19:31:19.393 回答
4

我假设那是 irb 的输出。Irb 试图打印您的对象,即将它转换为字符串。由于您没有提供自定义 to_s ("to string") 方法,因此您的对象继承了这个:

http://ruby-doc.org/core-1.9.3/Object.html#method-i-to_s

返回一个表示 obj 的字符串。默认的 to_s 打印对象的类和对象 id 的编码。作为一种特殊情况,作为 Ruby 程序初始执行上下文的顶级对象返回“main”。</p>

进一步挖掘源代码可以发现,十六进制数实际上是该对象实例占用的内存地址。在 Ruby 中,您无法用这些信息做任何花哨的事情。这只是为对象实例生成唯一标识符的一种便捷方式。

于 2013-02-22T19:31:00.167 回答
2

是的,它是对您正在创建的对象的引用。是的,您可以访问该对象。

于 2013-02-22T19:27:57.083 回答