为什么这个Ruby对象同时具有to_s和test方法,这些方法看起来都是相同的呢?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (10)

为什么Ruby里对象to_sinspect方法看起来做同样的事情?

p方法调用inspect并输出to_s表示对象的调用。

如果我运行

class Graph
  def initialize
    @nodeArray = Array.new
    @wireArray = Array.new
  end
  def to_s # called with print / puts
    "Graph : #{@nodeArray.size}"
  end
  def inspect # called with p
    "G"
  end
end

if __FILE__ == $0
  gr = Graph.new
  p gr
  print gr
  puts gr
end
G
Graph : 0
Graph : 0
  • 那么,为什么Ruby有两个功能做同样的事情?to_s和inspect之间有什么区别?
  • puts,print以及p有什么区别?

提问于
用户回答回答于

inspect更多地用于调试,to_s最终用户或显示目的。

例如,[1,2,3].to_s[1,2,3].inspect产生不同的输出。

用户回答回答于

inspect是一种默认情况下告诉你类名,实例的方法object_id,并列出实例的实例变量。

print并且puts正如你所知道的那样使用对象to_s方法的值STDOUT。如Ruby的文档所示,Object#to_s返回表示对象的字符串 - 用于最终用户的可读性。

print并且puts除了puts自动附加换行符之外,它们是相同的,而print不是。

扫码关注云+社区