|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
In ruby, as class are singleton objects, does anyone have any ideas when
a a singleton object should be used vs. simply adding methods to the class? For example, class Foo include Singleton def bar end end vs. class Foo def self.bar end end |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
On Sunday 08 June 2008 22:35:25 Paul McMahon wrote:
> In ruby, as class are singleton objects, does anyone have any ideas when > a a singleton object should be used vs. simply adding methods to the > class? I always include Singleton, but I see what you mean. A better way might be to do it with modules: module Foo def self.bar end end One example is mixins, though. For example, here: > class Foo > def self.bar > end > end A mixin would almost certainly be expecting to be mixed via "include" here, not "extend". This might not always matter, but some mixins will define things like self.included, and won't work at all if you try to extend them instead. However, a mixin which expected "extend" would still work on a Singleton object: class Foo include Singleton def bar end end Foo.instance.extend SomeMixin I think the main reason for doing Singleton, though, is that it expresses intent better, and it prevents the class from being instantiated -- sure, there are ways around it, but you're not going to accidentally call Foo.new without getting an error. |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
In reply to myself:
> it prevents the class from being instantiated To clarify -- prevents it from being instantiated again. |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
Hi --
On Mon, 9 Jun 2008, Paul McMahon wrote: > In ruby, as class are singleton objects, does anyone have any ideas when I'd just say: classes are objects. Like other objects, they can have methods added to them on a per-object basis (give or take the fact that "per-object" in the case of a class actually includes subclasses). > a a singleton object should be used vs. simply adding methods to the > class? For example, > > class Foo > include Singleton > def bar > end > end > > vs. > > class Foo > def self.bar > end > end I don't see these techniques as addressing the same problem or being likely candidates to replace each other. I'd go by what you need. If you need a class that has only one instance, then use Singleton. If you've got a situation where there's class-level (as opposed to instance-level) knowledge involved, then use a class method. David -- Rails training from David A. Black and Ruby Power and Light: INTRO TO RAILS June 9-12 Berlin ADVANCING WITH RAILS June 16-19 Berlin ADVANCING WITH RAILS July 21-24 Edison, NJ See http://www.rubypal.com for details and updates! |
|
![]() |
| Outils de la discussion | |
|
|