-1

String クラス内のメソッド to_s を置き換えましたが、実行するputs "string"と、to_s メソッドではなく ruby​​ が呼び出されることがわかります。

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 に答える