似乎这两种方法都返回相同的结果(对象的人类可读表示及其类型)。方法之间有什么区别?
class Foo
end
f = Foo.new
puts f.class <== puts Foo
puts f.class.inspect <== puts Foo
答案 0 :(得分:4)
似乎这两种方法都返回相同的结果(对象及其类型的人类可读表示)。
不,他们不会。
方法之间有什么区别?
Object#class
返回接收者的类。
Module#inspect
是Module#to_s
的别名,并返回模块的人类可读字符串表示形式。特别是,如果有Module#name
,则返回Class
,否则返回唯一的表示。对于单例类,它包含有关单例类是单例类的对象的信息。
因此,这两种方法不会返回相同的结果。事实上,他们甚至不会返回同一个类的结果:Object#class
返回String
类的实例,Module#inspect
返回RequestSenderToken的实例类。
答案 1 :(得分:0)
由于puts
需要字符串,因此它会调用类的to_s
方法。我相信Class继承了method from Module:
返回表示此模块或类的字符串。对于基本类和模块,这是名称。对于单身人士,我们也会显示有关我们所附信息的信息。
也别名为:inspect
也许您打算查看对象的方法?
class Foo
def initialize
@t = 'Junk'
end
end
f = Foo.new
puts f.class # => Foo
puts f.to_s # => #<Foo:0x007fce2503bbf0>
puts f.inspect # => #<Foo:0x007fce2503bbf0 @t="Junk">