ERB:NameError.message创建不会在ruby上调用#to_s> 2.0.0

时间:2014-01-13 21:22:09

标签: ruby

使用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版本上获得相同的输出。

1 个答案:

答案 0 :(得分:2)

打印的字符串#<A:0x007f98a29a88b8>来自对inspect的来电,而非来自to_s

要获得该部分的不同输出,请实施inspect方法。

class A
  def inspect
    'class <A>'
  end
end