-1

我已经替换了 String 类中的 to_s 方法,但正如我所见,当我运行时puts "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

如何替换这个隐式初始化?

4

1 回答 1

5

当我运行 puts "string" 时,ruby 调用的不是 to_s 方法。

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

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

于 2013-09-26T08:46:53.220 回答