使用ERB并实现#to_s时,我遇到了奇怪的行为 - 例如:
require "erb"
TEMPLATE = "<%= not_here %>"
class A
def to_s
"class <A>"
end
def to_str
to_s
end
def render
begin
ERB.new(TEMPLATE, nil, '-').result(binding)
rescue Exception => e
print e.to_s
end
end
end
A.new().render
在ruby 1.9.3上打印undefined local variable or method 'not_here' for class <A>:A
在ruby 2.0.0上打印undefined local variable or method 'not_here' for #<A:0x007f98a29a88b8>
有人可以解释为什么会这样,以及如何处理它以便在两个ruby版本上获得相同的输出。
答案 0 :(得分:2)
打印的字符串#<A:0x007f98a29a88b8>
来自对inspect
的来电,而非来自to_s
。
要获得该部分的不同输出,请实施inspect
方法。
class A
def inspect
'class <A>'
end
end