2014-01-13 43 views
0

我使用ERB和實施#to_s時遇到奇怪的行爲 - 例如:ERB:NameError.message創建不會呼籲紅寶石#to_s> 2.0.0

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 關於紅寶石2.0.0這打印undefined local variable or method 'not_here' for #<A:0x007f98a29a88b8>

有人可以解釋爲什麼是這樣的情況下,如何做到這一點,以獲得相同的輸出在這兩個ruby版本。

回答

2

打印字符串#<A:0x007f98a29a88b8>來自inspect而不是to_s

要獲得該零件的不同輸出,請實施inspect方法。

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