Ruby类返回值

时间:2013-02-22 19:23:33

标签: ruby

我正在学习Ruby并且上了一堂课来帮助:

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

输出:

not doing anything
#<WhatImDoing:0xb74b14e8>

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

感谢。

3 个答案:

答案 0 :(得分:6)

第二行是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 

答案 1 :(得分: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”。

进一步深入研究源代码可以发现十六进制数确实是该对象实例占用的内存地址。在Ruby中,你对这些信息没有任何想象力。这只是为对象实例生成唯一标识符的便捷方式。

答案 2 :(得分:2)

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