Project

General

Profile

Actions

Bug #13005

closed

Inline rescue is inconsistent when rescuing NoMethodError

Added by josh.cheek (Josh Cheek) over 7 years ago. Updated over 4 years ago.

Status:
Closed
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 1 (0 open1 closed)

Related to Ruby master - Bug #12402: Inline rescue behavior inconsistent for method calls with arguments and assignmentClosednobu (Nobuyoshi Nakada)Actions

Updated by matz (Yukihiro Matsumoto) over 7 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 7 years ago

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

@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 7 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.

Actions #4

Updated by shyouhei (Shyouhei Urabe) over 7 years ago

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

Updated by jeremyevans0 (Jeremy Evans) over 4 years ago

  • Status changed from Open to Closed
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0