From: rr.rosas@... Date: 2014-07-28T12:48:25+00:00 Subject: [ruby-core:64096] [ruby-trunk - Feature #9064] Add support for packages, like in Java Issue #9064 has been updated by Rodrigo Rosenfeld Rosas. Not all reasons, but important ones in my opinion specially as you get big namespaces and nesting level. I didn't want to mix everything in a single request, but since you're asking for more reasons/motivation let me also state what else I'd like to be added in case packages are approved. The first immediate benefit is that we could have something like this: ~~~ # a/b/my_class.rb package A::B class MyClass end # a/b/c/specialized_class.rb require_relative '../my_class' package A::B::C class SpecializedClass def initialize @my_class = MyClass.new # rather than A::B::MyClass.new end end # Another feature I'd like added but I haven't included in this ticket when I created waiting for a future ticket as it's an enhancement over the original packaging system: "use" # j/k/other_class.rb package J::K require 'a/b/my_class' use A::B::MyClass # or A::B or A::B::* or import rather than use, that's why I haven't proposed it yet, I don't have this part clear yet. class OtherClass < MyClass end ~~~ I can see lots of good things coming from some packaging system and it would also encourage more namespaces usage if people wouldn't have to type a lot to use inner classes. But specially the search path would always be the same when using namespaces/packages. For instance, consider this example: ~~~ # a/b/namespace.rb module A module B end end # my_class.rb require 'a/b/namespace' class A::B::MyClass end # This is different from below with regards to the search path which I find to be a (non-obvious) problem. module A module B class MyClass end end end ~~~ Now, you got me curious about what you have in mind when you talk about integrating something like Node's packaging system into Ruby. I can't really understand how that would play well with the way Ruby works... Could you please provide an example of how you envision such packaging system in Ruby? Maybe I could like your idea better than mine... ---------------------------------------- Feature #9064: Add support for packages, like in Java https://bugs.ruby-lang.org/issues/9064#change-48108 * Author: Rodrigo Rosenfeld Rosas * Status: Feedback * Priority: Normal * Assignee: Yukihiro Matsumoto * Category: core * Target version: ---------------------------------------- In Java, it's easy to define a package for a certain class: package com.company.MyClass We don't use that convention in Ruby but we have another way of packaging classes: module MyLibrary module InnerNamespace class MyClass end end end I'd prefer to be able to use something like this instead meaning exactly the same thing: package MyLibrary::InnerNamespace # or MyLibrary.InnerNamespace, I don't really care class MyClass end Could you please consider this idea? ---Files-------------------------------- feature-9064.pdf (16.7 KB) -- https://bugs.ruby-lang.org/