【问题标题】:Why does 'puts Time' have a string output of "Time"为什么“puts Time”的字符串输出为“Time”
【发布时间】:2015-08-02 11:39:50
【问题描述】:

如果您运行以下命令:

puts Time

那么输出如下;

Time

这让我觉得很奇怪,但我还不知道为什么,ClassMethod 也是如此。

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

【问题讨论】:

  • 好像打印了类的类名。由于 Time 是一个类,它会打印名称。可能因为默认情况下所有类都响应 to_s,所以 classname.to_s 就是那个类名。
  • 你写puts Time时的期望是什么?
  • 老实说,我只是做错了,对结果很感兴趣。但我没想到“时间”会作为输出。这里的 cmets 提供了帮助。

标签: ruby class output puts


【解决方案1】:

TimeClassMethod 等类本身就是 Class 类的实例。

Time.class
# => Class

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

Time.to_s
# => "Time"

当你执行puts Time时,Timeto_s转换成字符串,因此结果。

【讨论】:

    【解决方案2】:

    一般来说,ruby 中的一切都是对象。在您的情况下,时间是类的对象。您可以通过

    找到它
    Time.class  => Class
    

    如果您将它传递给 puts 或 p,那么它只需在其上运行检查方法。所以你可以得到相同的输出 Time 和 Time.inspect

    puts Time = puts Time.inspect
    

    想解释得更好一点。假设你有一堂课

    class A
    end
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 2023-04-09
      • 2020-07-25
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多