【问题标题】:What is the difference between Object.class and Object.class.inspect in Ruby?Ruby 中的 Object.class 和 Object.class.inspect 有什么区别?
【发布时间】:2017-10-08 11:07:03
【问题描述】:

似乎这两种方法都返回相同的结果(对象及其类型的人类可读表示)。这些方法有什么区别?

class Foo

end

f = Foo.new
puts f.class          <==  puts Foo
puts f.class.inspect  <==  puts Foo

【问题讨论】:

  • 您能否澄清您遇到问题的那些方法的文档的哪个特定部分?这样,Ruby 开发人员可以改进该部分以帮助未来的读者。

标签: ruby class oop


【解决方案1】:

这两种方法似乎都返回相同的结果(对象及其类型的人类可读表示)。

不,他们没有。

这些方法有什么区别?

Object#class 返回接收者的类。

Module#inspectModule#to_s 的别名,并返回模块的人类可读字符串表示。特别是,它返回Module#name,如果它有一个,否则返回一个唯一的表示。对于单例类,它包括有关单例类是其单例类的对象的信息。

因此,这两种方法不会返回相同的结果。事实上,它们甚至不返回同一类的结果:Object#class 返回Class 类的实例,Module#inspect 返回String 类的实例。

【讨论】:

    【解决方案2】:

    由于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">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-06
      • 2010-11-17
      • 2010-12-16
      • 2013-06-10
      • 2011-05-17
      • 2012-09-12
      • 2010-09-24
      • 2023-03-26
      相关资源
      最近更新 更多