2011-06-24 18 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

相关问题