【问题标题】:Why begin/rescue/else behaves differently on 1.9.2 and 1.8.7为什么 begin/rescue/else 在 1.9.2 和 1.8.7 上的行为不同
【发布时间】:2011-06-24 11:15:52
【问题描述】:

我正在使用mm 方法。在 ruby​​ 1.9.2 中,它的行为很奇怪,而不是预期的结果 1.9.2=>10 我得到了

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

【问题讨论】:

  • 已阅读 Dave Thomas 等人的“Programming Ruby 1.9”一书第 355 页上的“异常”,但没有用...
  • @Evgeny Shadchnev 为什么在标题中提到 1.8.6?我将其更改为 1.8.7。
  • @sawa 抱歉,打错字了。你是对的。

标签: ruby exception ruby-1.9 ruby-1.9.2 ruby-1.8


【解决方案1】:

这是一个open bug in Ruby。不过,有一个讨论是,它的行为应该像 1.8 中的那样还是 1.9 中的那样。

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

【讨论】:

  • 澄清一下,它返回 8 而不是预期的 10 的原因是 STDOUT.write("ELSE *#{$!}*\n") 是实际执行的最后一行(而不是 return),并且您从中返回值(这是写入的字节数,在这种情况下为 8)。
  • 感谢 Evgeny。我也这么认为。我认为这是一个错误......现在我确定了。
猜你喜欢
  • 2013-02-01
  • 2011-03-22
  • 2012-01-15
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多