2011-06-24 17 views
2

我正在使用方法mm。在紅寶石1.9.2,它的行爲怪異,而不是預期的結果1.9.2=>10我越來越爲什麼在1.9.2和1.8.7上開始/救援/行爲有所不同

ELSE ** 
1.9.2=>8 

是怎麼回事的任何想法?

class A 

def mm(data) 
    begin 
    send_len = data 
    return send_len 
    rescue Exception 
    STDOUT.write("Rescue *#{$!}*\n") 
    else 
    STDOUT.write("ELSE *#{$!}*\n") 
    end 
end 

end # class A 

a = A.new 
print "#{RUBY_VERSION}=>#{a.mm(10)}\n" 

隨着1.8.7我得到預期的結果:

1.8.7=>10 
+0

在閱讀Dave Thomas等人的書籍「Programming Ruby 1.9」的第355頁上的「例外」,但沒有用處...... – user454322

+0

@Evgeny Shadchnev爲什麼在標題中提到1.8.6?我將它改爲1.8.7。 – sawa

+0

@sawa對不起,錯字。你是對的。 –

回答

3

這是一個open bug in Ruby。不過,有一個討論,它應該表現得像是表現在1.8還是在1.9表現。

Matz,Ruby的作者,believes that it should behave as in 1.8

+4

爲了澄清,它返回8而不是預期的10的原因是'STDOUT.write(「ELSE *#{$!} * \ n」)'是實際執行的最後一行(而不是'return' ),並且返回該值(這是寫入的字節數,在本例中爲8)。 –

+0

謝謝Evgeny。我也這麼認爲。我認爲這是一個錯誤......現在我確定。 – user454322

+0

感謝貂....現在我知道8從哪裏來 – user454322

相關問題