Почему этот объект 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
Я получаю
G
Graph : 0
Graph : 0
- Затем, почему Ruby имеет две функции, делает то же самое? В чем разница между
to_s
иinspect
? - И какая разница между
puts
,print
иp
?
Если я прокомментирую функцию to_s
или inspect
, я получаю следующее.
#<Graph:0x100124b88>
#<Graph:0x100124b88>