From: shyouhei@... Date: 2016-12-07T00:09:40+00:00 Subject: [ruby-core:78523] [Ruby trunk Bug#13005] Inline rescue is inconsistent when rescuing NoMethodError Issue #13005 has been updated by Shyouhei Urabe. Martin D��rst wrote: > @matz: Is there a good reason that `o.a = 1 rescue $!.class` is interpreted as `o.a = (1 rescue $1.class)`, while it looks to me as if `o.a = 1 if $!.class` is `(o.a = 1) if $!.class`? > > (Backwards compatibility might be a reasonable good reason, but I can't imagine it being useful.) I guess issue #12402 is the reason behind this behaviour. ---------------------------------------- Bug #13005: Inline rescue is inconsistent when rescuing NoMethodError https://bugs.ruby-lang.org/issues/13005#change-61905 * Author: Josh Cheek * Status: Open * Priority: Normal * Assignee: Yukihiro Matsumoto * ruby -v: ruby 2.4.0dev (2016-11-16 trunk 56815) [x86_64-darwin15] * Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN ---------------------------------------- ```ruby o = "some object" class << o private attr_accessor :a end # GETTER can be rescued in a begin-block or inline begin o.a rescue; $!.class # => NoMethodError end o.a rescue $!.class # => NoMethodError # SETTER can be rescued in a begin-block but NOT inline! begin o.a = 1 rescue; $!.class # => NoMethodError end o.a = 1 rescue $!.class # ~> NoMethodError # ~> private method `a=' called for "some object":String # ~> Did you mean? a # ~> # ~> program.rb:18:in `
' ``` -- https://bugs.ruby-lang.org/ Unsubscribe: