[ruby-core:60484] [ruby-trunk - Bug #9393] [Rejected] Strange behavior of DelegateClass + loop + method_missing

From: usa@...
Date: 2014-02-05 03:29:34 UTC
List: ruby-core #60484
Issue #9393 has been updated by Usaku NAKAMURA.

Status changed from Closed to Rejected

----------------------------------------
Bug #9393: Strange behavior of DelegateClass + loop + method_missing
https://bugs.ruby-lang.org/issues/9393#change-44950

* Author: Pavel Forkert
* Status: Rejected
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: 2.1.0-p0
* Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
Having the following class in Ruby 2.1:

```
require 'delegate'

class A < DelegateClass(Hash)
  def a
    loop do
      ::Kernel.p 'A'
      break
    end
  end
end
```

After calling `A.new({}).a` the output is "A".

However if `method_missing` is added to the class:

```
class A < DelegateClass(Hash)
  def a
    loop do
      ::Kernel.p 'A'
      break
    end
  end

  def method_missing(method, *args, &block)
    ::Kernel.p method
  end
end
```

Then after calling `A.new({}).a`, the output is somewhat unexpected: `:loop`. That actually means that `:loop` method cannot be found and the block within the loop will not run. Is that the right behavior?

Ruby 2.0 returns "A" in both cases.




-- 
http://bugs.ruby-lang.org/

In This Thread

Prev Next