为什么'放置时间'有一个字符串输出"时间"

时间:2015-08-02 11:39:50

标签: ruby class output puts

如果您运行以下内容:

puts Time

然后输出如下;

Time

令我觉得奇怪,但我还无法找出原因,这同样适用于ClassMethod

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

2 个答案:

答案 0 :(得分:5)

班级TimeClassMethod等本身就是班级Class的实例。

Time.class
# => Class

ClassModule#to_s继承to_s,这是该类的名称:

Time.to_s
# => "Time"

当您执行puts Time时,Time会被to_s转换为字符串,因此会产生结果。

答案 1 :(得分:2)

一般来说,红宝石中的所有东西都是一个物体。在你的情况下,时间是类的对象。你可以通过

找到它
Time.class  => Class

如果将它传递给puts或p,则只需对其执行inspect方法即可。所以你可以得到相同的输出Time和Time.inspect

puts Time = puts Time.inspect

想要更好地解释一下。假设你有一个班级

class A
end

现在运行以下命令并观察输出

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