为什么 'puts Time' 的字符串输出为 "Time"

Why does 'puts Time' have a string output of "Time"

如果您运行满足以下条件:

puts Time

则输出如下;

Time

这让我觉得很奇怪,但我还不明白为什么,这同样适用于 ClassMethod.

我可以看到这些是 类,但是为什么 Ruby 将它们输出到控制台?

classes TimeClassMethod 等本身就是 class Class.

Time.class
# => Class

ClassModule#to_s 继承 to_s,这是 class:

的名称
Time.to_s
# => "Time"

当你执行puts Time时,Timeto_s转换为字符串,因此得到结果

一般来说,ruby中的一切都是对象。在你的例子中,时间是 Class 的一个对象。你可以通过

找到它
Time.class  => Class

如果您将它传递给 puts 或 p,那么它只是 运行 inspect 方法。所以你可以获得相同的输出时间和 Time.inspect

puts Time = puts Time.inspect

想更好地解释一下。假设您有 class

class A
end

现在运行下面和观察者输出

puts A
puts A.inspect
puts A.new
puts A.new.inpsect