From: Alexander E. Fischer on 7 Jul 2010 08:52 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.
From: Alexander E. Fischer on 7 Jul 2010 09:02 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.
|
Pages: 1 Prev: Ruby switches Next: Global method usage in standard libs |