From: Pavel@..., Forkert@... Date: 2014-01-10T22:28:19+00:00 Subject: [ruby-core:59688] [ruby-trunk - Bug #9393] (Open) Strange behavior of DelegateClass + loop + method_missing Issue #9393 has been reported by Pavel Forkert. ---------------------------------------- Bug #9393: Strange behavior of DelegateClass + loop + method_missing https://bugs.ruby-lang.org/issues/9393 * Author: Pavel Forkert * Status: Open * 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/