From: "matz (Yukihiro Matsumoto)" Date: 2012-04-01T00:33:06+09:00 Subject: [ruby-core:44007] [ruby-trunk - Feature #5148] Constant Namespace/Scoping in Dynamic Classes/Modules Issue #5148 has been updated by matz (Yukihiro Matsumoto). Assignee changed from matz (Yukihiro Matsumoto) to mame (Yusuke Endoh) I think this change is a good idea, basically. But I am not sure how much influence it would have to existing Ruby programs, and implementations. For example, Nobu has already shown his concern. We have to experiment before accepting this proposal. Matz. ---------------------------------------- Feature #5148: Constant Namespace/Scoping in Dynamic Classes/Modules https://bugs.ruby-lang.org/issues/5148#change-25537 Author: trans (Thomas Sawyer) Status: Assigned Priority: Normal Assignee: mame (Yusuke Endoh) Category: Target version: When defining a dynamic class or module, the constants defined within it are not kept within it's namespace, but are tied to the outer scope's namespace. c = Class.new do module M; end end #=> # c::M #=> M M #=> M This presents serious limitations in designing domain specific languages that take advantage of Ruby's class system. For instance in creating a test framework that uses blocks to defines testcases it is not possible to isolate fixture constants from those of other testcases. E.g. describe "fancy mixin" do class Foo include FancyMixin end ... end describe "unfancy mixin" do class Foo include UnfancyMixin end ... end Foo in the unfancy testcase will use Foo in the fancy testcase, causing unexpected issues --especially as these testcases may be defined in different files and coded by different people. -- http://bugs.ruby-lang.org/