From: "Alexander E. Fischer" Date: 2010-07-07T22:05:03+09:00 Subject: Re: Global methods in Ruby standard lib On Wed, 07 Jul 2010 12:52:25 +0000, Alexander E. Fischer wrote: > I noticed that at least some of the standard libs use global methods to > provide some kind of shortcut to the actual new method. For example the > excellent Pathname class' objects can be generated either by > > Pathname.new('/home/someone') > > or simply through > > Pathname('/home/someone') > > The latter example is possible through a method on the Kernel module, > which is named capitalized. > > module Kernel > def Pathname(path) > Pathname.new(path) > end > end > > I think this shortcut is really useful, but also very ugly in its > implementation. If more classes do this, especially classes outside of > the class library, the global method namespace, which is already filled > with a lot of things, will become overcrowded. In the end there will be > naming collisions because of a lack of sub-namespacing. To discourage > this behaviour I would recommend to remove those global methods and > implement the whole thing in a slightly different fashion: > > class Pathname > def self.[](path) > new(path) > end > end > > This implementation would allow this: > > Pathname['/home/someone'] > > which is still very near to the current variant but more eco-friendly in > my opinion. > > If there is no big problem about this (tell me, if you see one!) I'm > willing to add the new methods in affected classes (at least the > standard lib classes Complex and Rational use this, too) and add a > deprecation warning in the old methods. Then I would submit this as a > patch. Sorry for the repost. Do NOT use this thread to discuss. Use the other thread called "Global method usage in standard libs" for your answers. Thank you.