From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS4713 221.184.0.0/13 X-Spam-Status: No, score=-3.9 required=3.0 tests=AWL,BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by dcvr.yhbt.net (Postfix) with ESMTP id 85C4F1F4B4 for ; Tue, 13 Apr 2021 11:51:06 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 0B8461210EB; Tue, 13 Apr 2021 20:50:03 +0900 (JST) Received: from xtrwkhkc.outbound-mail.sendgrid.net (xtrwkhkc.outbound-mail.sendgrid.net [167.89.16.28]) by neon.ruby-lang.org (Postfix) with ESMTPS id 9535C1210EA for ; Tue, 13 Apr 2021 20:50:00 +0900 (JST) Received: by filterdrecv-54f669f855-mxjph with SMTP id filterdrecv-54f669f855-mxjph-14-607585A1-3A 2021-04-13 11:50:57.949585237 +0000 UTC m=+53772.187093900 Received: from herokuapp.com (unknown) by geopod-ismtpd-4-0 (SG) with ESMTP id 6-JZFsU4StSfcCqrOUSiyQ for ; Tue, 13 Apr 2021 11:50:57.792 +0000 (UTC) Date: Tue, 13 Apr 2021 11:50:57 +0000 (UTC) From: fxn@hashref.com Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 79467 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Feature X-Redmine-Issue-Id: 17753 X-Redmine-Issue-Author: tenderlovemaking X-Redmine-Sender: fxn X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-SG-EID: =?us-ascii?Q?nBqvi0=2FX0JUE4l3AKfUjuwxdcsxPcgQmSMOE0TmEhKdpirGCnedG9JAzuSDQZM?= =?us-ascii?Q?9NJuCB7Qlkl5Tsz5+hA+7sXQmY8DoUELYYLpmw+?= =?us-ascii?Q?Qgzx1nco66rTDFxMUwYk0kuAPWTU7ht5Ln55Nix?= =?us-ascii?Q?Sy+c30H0xiCFbPKBPddtbIDbx08ezeYF2WORGpK?= =?us-ascii?Q?xHe3kv4I3PUHVBQdz69zu+HizWXs4WY5gcw=3D=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 103424 Subject: [ruby-core:103424] [Ruby master Feature#17753] Add Module#namespace X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Ruby developers List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" Issue #17753 has been updated by fxn (Xavier Noria). The lexical parent module happens to be just the object from which you set the name, which does not even reflect the scope/nesting at assignment time (as you know): ```ruby module A::B module X::Y class C name # => X::Y::C end end end ``` Yeah, we see it differently. There, I only see a constant assignment. You see it like "most of the time, you can think of it that way because that's how most of Ruby looks like". That difference in points of view is fine :). ---------------------------------------- Feature #17753: Add Module#namespace https://bugs.ruby-lang.org/issues/17753#change-91517 * Author: tenderlovemaking (Aaron Patterson) * Status: Open * Priority: Normal ---------------------------------------- Given code like this: ```ruby module A module B class C; end class D; end end end ``` We can get from `C` to `B` like `C.outer_scope`, or to `A` like `C.outer_scope.outer_scope`. I want to use this in cases where I don't know the outer scope, but I want to find constants that are "siblings" of a constant. For example, I can do `A::B::C.outer_scope.constants` to find the list of "sibling" constants to `C`. I want to use this feature when walking objects and introspecting. For example: ```ruby ObjectSpace.each_object(Class) do |k| p siblings: k.outer_scope.constants end ``` I've attached a patch that implements this feature, and there is a pull request on GitHub [here](https://github.com/ruby/ruby/pull/4326). ---Files-------------------------------- 0001-Add-Module-outer_scope.patch (5.93 KB) 0001-Add-Module-namespace.patch (5.89 KB) -- https://bugs.ruby-lang.org/