Project

General

Profile

Bug #13005

Inline rescue is inconsistent when rescuing NoMethodError

Added by josh.cheek (Josh Cheek) over 2 years ago. Updated about 1 month ago.

Status:
Closed
Priority:
Normal
Target version:
-
ruby -v:
ruby 2.4.0dev (2016-11-16 trunk 56815) [x86_64-darwin15]
[ruby-core:78486]

Description

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 `<main>'

Related issues

Related to Ruby master - Bug #12402: Inline rescue behavior inconsistent for method calls with arguments and assignmentClosedActions

History

Updated by matz (Yukihiro Matsumoto) over 2 years ago

  • Status changed from Open to Closed
o.a = 1 rescue $!.class

is parsed as

o.a = (1 rescue $!.class)

Try

(o.a = 1) rescue $1.class

Matz.

Updated by duerst (Martin Dürst) over 2 years ago

  • Assignee set to matz (Yukihiro Matsumoto)
  • Status changed from Closed to Open

matz (Yukihiro Matsumoto): 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.)

Updated by shyouhei (Shyouhei Urabe) over 2 years ago

Martin Dürst wrote:

matz (Yukihiro Matsumoto): 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.

#4

Updated by shyouhei (Shyouhei Urabe) over 2 years ago

  • Related to Bug #12402: Inline rescue behavior inconsistent for method calls with arguments and assignment added
#5

Updated by jeremyevans0 (Jeremy Evans) about 1 month ago

  • Status changed from Open to Closed

Also available in: Atom PDF