Ruby 为什么可以';t I改变看跌期权的输出;“字符串”;通过骑过。到_s或在字符串上初始化?
我在String类中替换了一个方法, 但是正如我所看到的,当我运行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
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
的返回值。它只能用于设置已创建对象的属性,不能替换该对象