1
class MyClass
  def fun
    puts self
  end

  def self.fun2
    puts self
  end
end

mine = MyClass.new
mine.fun
MyClass.fun2

上面的代码应该打印 self 两次,在这种情况下它们都是 MyClass。但是,实际输出是

#<MyClass:0x10f6a82d0>
MyClass

它们有两种不同的形式。我想知道它们是否真的代表了不同的事物。

4

2 回答 2

1

#<MyClass:0x10f6a82d0>表示类的一个实例MyClassMyClassf.fun2返回类本身。

于 2013-03-27T01:38:32.900 回答
1

第一个结果是MyClass实例的字符串表示,而第二个结果是 MyClass 类的字符串表示。

如果您制作了另一个mine2 = MyClass.new并打印了它,您将在最后得到一个不同的十六进制标识符,以将它与您的其他实例区分开来。

于 2013-03-27T01:38:35.610 回答