From: nagachika00@... Date: 2018-03-25T05:35:24+00:00 Subject: [ruby-core:86287] [Ruby trunk Bug#14469] private_constant and deprecate_constant are ignored by autoloading Issue #14469 has been updated by nagachika (Tomoyuki Chikanaga). Backport changed from 2.3: REQUIRED, 2.4: REQUIRED, 2.5: DONE to 2.3: REQUIRED, 2.4: DONE, 2.5: DONE ruby_2_4 r62916 merged revision(s) 62394,62395. ---------------------------------------- Bug #14469: private_constant and deprecate_constant are ignored by autoloading https://bugs.ruby-lang.org/issues/14469#change-71200 * Author: nobu (Nobuyoshi Nakada) * Status: Closed * Priority: Normal * Assignee: * Target version: * ruby -v: 2.0 or later * Backport: 2.3: REQUIRED, 2.4: DONE, 2.5: DONE ---------------------------------------- Consider the following code in file "zzz.rb": ```ruby class ZZZ P = D = 1 private_constant :P deprecate_constant :D end ``` After loading the file, accesses to `ZZZ::P` and `ZZZ:D` cause an exception and a warning respectively. ``` $ ruby -r./zzz -e ZZZ::P Traceback (most recent call last): -e:1:in `
': private constant ZZZ::P referenced (NameError) ``` ``` $ ruby -r./zzz -e ZZZ::D -e:1: warning: constant ZZZ::D is deprecated ``` But autoloading the file nothing happens. ``` $ ruby -e 'class ZZZ;autoload :P,"./zzz.rb";end; ZZZ::P' ``` ``` $ ruby -e 'class ZZZ;autoload :D,"./zzz.rb";end; ZZZ::D' ``` After requiring the file in ordinary way, they works. ``` $ ruby -e 'class ZZZ;autoload :P,"./zzz.rb";end; require "./zzz.rb"; ZZZ::P' Traceback (most recent call last): -e:1:in `
': private constant ZZZ::P referenced (NameError) ``` ``` $ ruby -e 'class ZZZ;autoload :D,"./zzz.rb";end; require "./zzz.rb"; ZZZ::D' -e:1: warning: constant ZZZ::D is deprecated ``` -- https://bugs.ruby-lang.org/ Unsubscribe: