显示对象:puts和p,to_s和inspect

时间:2015-08-25 21:07:01

标签: ruby methods override

在Rubymonk网站上,我遇到了关于inspect vs to_s部分的交互式问题(2.3显示对象:puts和p,to_s并检查)。他们要求覆盖to_s方法>'以便它返回一个字符串同时包含物品的名称和数量。'

以下是具体问题的链接:https://rubymonk.com/learning/books/4-ruby-primer-ascent/chapters/45-more-classes/lessons/108-displaying-objects

我不知道如何处理这一部分。我确实跳过了本教程,所以我可能错过了如何解决可能已经展示如何解决这个问题的类似问题。

我在字符串中使用了puts方法和表达式插值:

class Item
   def initialize(item_name, qty)
     @item_name = item_name
     @qty = qty
   end

   def to_s
      puts '#{@item_name} and #{@qty}'
   end
 end

item = Item.new("a",1)

puts item
p item

2 个答案:

答案 0 :(得分:0)

尝试:

def to_s
  p "#{@item_name} and #{@qty}"
end

带双引号和p

答案 1 :(得分:0)

您的代码存在两个问题:

  1. 单引号字符串不进行插值,只有双引号字符串
  2. 您没有返回字符串,您将字符串作为参数传递给puts并返回puts的结果,但是,如果您查看puts的文档,你会看到它总是返回nil
  3. 所以,你的代码应该是

    class Item
      def initialize(item_name, qty)
        @item_name = item_name
        @qty = qty
      end
    
      def to_s
        "#{@item_name} and #{@qty}"
      end
    end
    
    item = Item.new('a', 1)
    
    puts item
    p item