是否可以在Ruby的类中调用重写的to_s?

时间:2018-12-02 16:06:01

标签: ruby

在对类中的变量之一进行更改后,我希望类的已实现的方法(to_s)被调用,并使用上述变量的新值进行调用。我目前使用:

class Car
   ...
   def ask_for_color_change(string)
     normalize = string.downcase
      if normalize == "yes"
        color = gets.chomp
        self.set_color(color)
        # tried with self.to_s also, doesn't work
        puts self
      elsif normalize == "no"
        puts "happy you like your factory color -> #{@color}"
      else
        puts "please reply with either yes/no ONLY"
      end
    end

  def to_s
    puts "New Car Details"
    puts "---------------"
    puts "Make: #{@make}"
    puts "Model: #{@model}"
    puts "Color: #{@color}"
  end

end

上述方法中的puts self输出#<Car:0x00007fabd18ddc98>。据我所知,这是默认的to_s实现。因此,换句话说,如何在类本身内调用覆盖的to_s

2 个答案:

答案 0 :(得分:1)

通过重构如下的`frame=[date,sma]` concat=pd.concat(frame,axis=0,ignore_index=True) concat 代码,我现在能够在to_s方法内成功地隐式调用ask_for_color_change(string)

to_s

因此,它与def to_s " New Car Details --------------- Make: #{@make} Model: #{@model} Color: #{@color} " end 的实现方式有关。对于puts方法仍然可以看到默认实现的功能的评论将不胜感激。谢谢!

答案 1 :(得分:1)

世界上已经存在太多混乱,无法让某人在调用data.frame时决定其班级没有返回String。解释器通过调用data.frame来强制执行此操作,而不是如果您的实现返回非字符串(或受污染的字符串)。

从源头上进行编辑,以提高可读性:

.id