Ruby 为什么可以';t I改变看跌期权的输出;“字符串”;通过骑过。到_s或在字符串上初始化?

Ruby 为什么可以';t I改变看跌期权的输出;“字符串”;通过骑过。到_s或在字符串上初始化?,ruby,Ruby,我在String类中替换了一个方法, 但是正如我所看到的,当我运行put“string”时,ruby不会调用to_s方法 def add_method(cls) cls.class_eval do def initialize self.new('you hacked') end def to_s 'you hacked' end end end add_method String puts "zxzxzzx" puts "z

我在String类中替换了一个方法, 但是正如我所看到的,当我运行
put“string”
时,ruby不会调用to_s方法

def add_method(cls)
  cls.class_eval do
    def initialize
      self.new('you hacked')
    end

    def to_s
      'you hacked'
    end
  end
end

add_method String

puts "zxzxzzx"
puts "zxzxzzx".to_s
哪些产出:

>> zxzxzzx
>> you hacked
如何替换此隐式初始化

当我运行puts“string”时,ruby不会调用to_的方法

def add_method(cls)
  cls.class_eval do
    def initialize
      self.new('you hacked')
    end

    def to_s
      'you hacked'
    end
  end
end

add_method String

puts "zxzxzzx"
puts "zxzxzzx".to_s
它已经是一个字符串,没有进行任何转换。有关更多信息,请参阅的源代码

而且,尝试使用初始值设定项的技巧也行不通。忽略
initialize
的返回值。它只能用于设置已创建对象的属性,不能替换该对象