From: merch-redmine@... Date: 2019-08-12T04:02:01+00:00 Subject: [ruby-core:94299] [Ruby master Bug#11055] autoload resets private_constant Issue #11055 has been updated by jeremyevans0 (Jeremy Evans). File const-visibility-before-autoload-11055.patch added I doubt dropping the existing constant visibility information is intentional behavior. You can work around the current behavior by resetting `private_constant`/`deprecate_constant` inside the autoloaded file, but that leads to duplication. Attached is a patch that will copy the constant visibility information across the autoload. ---------------------------------------- Bug #11055: autoload resets private_constant https://bugs.ruby-lang.org/issues/11055#change-80647 * Author: nobu (Nobuyoshi Nakada) * Status: Assigned * Priority: Normal * Assignee: matz (Yukihiro Matsumoto) * Target version: * ruby -v: 50203 * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- Is this behavior intentional? Suppose the following file: ~~~ $ cat a/b.rb class A; B = 1; end ~~~ This causes `NameError`. ~~~ $ ruby -I. -e 'class A;autoload :B, "a/b.rb"; private_constant :B; end' -e 'p A::B' -e:2:in `
': private constant A::B referenced (NameError) ~~~ But after it got loaded, `A::B` becomes public. ~~~ $ ruby -I. -e 'class A;autoload :B, "a/b.rb"; private_constant :B; B; end' -e 'p A::B' 1 ~~~ ---Files-------------------------------- const-visibility-before-autoload-11055.patch (3.93 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: