pro*_*eek 62 ruby printing object
为什么这个Ruby对象to_s
和inspect
看起来做同样事情的方法?
该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
Run Code Online (Sandbox Code Playgroud)
我明白了
G
Graph : 0
Graph : 0
Run Code Online (Sandbox Code Playgroud)
to_s
和之间有什么区别inspect
?puts
,print
以及p
?如果我注释掉to_s
或inspect
函数,我得到如下.
#<Graph:0x100124b88>
#<Graph:0x100124b88>
Run Code Online (Sandbox Code Playgroud)
Dav*_*vid 51
inspect
更多用于调试和to_s
最终用户或显示目的.
例如,[1,2,3].to_s
并[1,2,3].inspect
产生不同的输出.
Mar*_*off 32
inspect
默认情况下,它是一种方法,它告诉您类名,实例object_id
,并列出实例的实例变量.
print
并且puts
,正如您所知,将其用于放置对象to_s
方法的值STDOUT
.如Ruby的文档所示,Object#to_s
返回表示对象的字符串 - 用于最终用户可读性.
print
puts
除了puts
自动附加换行符之外,它们彼此相同,而print
不是.
gro*_*kus 14
为了与Python相比,to_s
就像是__str__
和inspect
像__repr__
.to_s
给你一个字符串,然后inspect
给你对象的字符串表示.如果您愿意,可以使用后者构造对象.
此外,to_str
在某些对象上有一个方法,当需要类似String的对象时,可以调用该方法,而不仅仅是字符串表示.(尝试在IRB:[1,2,3].to_str
它会失败,但[1,2,3].to_s
不会.)我觉得我应该提到这个,因为我之前被它咬了:)
小智 5
对于在开始使用Ruby Koans之后到达这里的任何人,输出的位置to_s
和inspect
差异的一个简单示例是:
nil.to_s # will yield an empty string, ie ""
nil.inspect # will yield the string "nil"
Run Code Online (Sandbox Code Playgroud)