From: elia@... Date: 2015-11-23T14:25:42+00:00 Subject: [ruby-core:71640] [Ruby trunk - Bug #11718] Constant access on `nil` Issue #11718 has been updated by Elia Schito. looks like it's somehow intended behavior https://github.com/ruby/ruby/blob/trunk/insns.def#L179-L190 /** @c variable @e Get constant variable id. If klass is Qnil, constants are searched in the current scope. If klass is Qfalse, constants are searched as top level constants. Otherwise, get constant under klass class or module. @j ������ id ������������������ klass ��� Qnil ������������������������������������������������������������������ Qfalse ��������������������������������������������������� ���������������������klass ������������������������������������ */ apparently introduced here: https://github.com/ruby/ruby/commit/d84f9b16946bca06ce0557ebe99152d7d445c9ec to resolve bug #10943 ---------------------------------------- Bug #11718: Constant access on `nil` https://bugs.ruby-lang.org/issues/11718#change-55042 * Author: Vais Salikhov * Status: Open * Priority: Normal * Assignee: * ruby -v: ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- It is possible to access top-level constants by doing `nil::CONSTANT`, which looks like a bug [according to Matz](https://github.com/opal/opal/issues/1197#issuecomment-158078778). Here are a couple of examples: ``` $ ruby -ve "Foo = 123; p nil::Foo" ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux] 123 ``` ``` $ ruby -ve "class A; Foo = 456; end; p nil::A::Foo" ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux] 456 ``` Thanks! -- https://bugs.ruby-lang.org/