[#398788] Constructor or a Method — Rubyist Rohit <lists@...>

Take for instance this code:

13 messages 2012/09/01

[#398896] how to sum element of array — Edward QU <lists@...>

dear all

19 messages 2012/09/04

[#398936] best coding for limiting a value — Regis d'Aubarede <lists@...>

A) result=value<min ? min : (value > max ? max : value)

17 messages 2012/09/04

[#398962] Long calculation & time limit — toto tartemolle <lists@...>

Hello,

17 messages 2012/09/05

[#398964] Compiling ruby from source on windows — GPad <peterpan105105@...>

Hi to all,=0AI'm trying to compile ruby on my windows 7. I have already a r=

10 messages 2012/09/05

[#398997] OpenURI open method problem — "Derek T." <lists@...>

The code I am referring to looks like this:

12 messages 2012/09/05

[#399002] Parsing through downloaded html — Sybren Kooistra <lists@...>

Hi all,

28 messages 2012/09/06

[#399012] "Hiding" pictures(and source code if it's possible) — "Damián M. González" <lists@...>

Ey guys, how are you?

11 messages 2012/09/06

[#399083] regix in grep or something like this — Ferdous ara <lists@...>

Hi

12 messages 2012/09/07

[#399206] please help me with making script — Charmaine Willemsen <lists@...>

In this example i like to parse birthday and sexe

11 messages 2012/09/11

[#399218] Pathname#to_str withdrawn in 1.9? — matt@... (Matt Neuburg)

Just getting started experimenting with Ruby 1.9 (1.9.3) and my scripts

13 messages 2012/09/12

[#399227] Breaking Down the Block — incag neato <lists@...>

Can someone please explain in plain english how this block treats the

20 messages 2012/09/13

[#399244] ruby Range to array that acts like time objects? — "Jermaine O." <lists@...>

Hello everybody,

15 messages 2012/09/13

[#399293] Ruby on Ubuntu 12.04 LST — Bojan Jordanovski <lists@...>

Hello everybody,

13 messages 2012/09/14

[#399298] wow, YAML / Psych in 1.9.3 is *slow*! — matt@... (Matt Neuburg)

I just started trying Ruby 1.9.3, coming from Ruby 1.8.7, and was

12 messages 2012/09/14

[#399304] Ruby 1.9.3 and OS X Mountain Lion — sto.mar@...

Hi all,

16 messages 2012/09/14

[#399343] Class variables or Class singleton variables? — "Damián M. González" <lists@...>

Guys, how are you?

18 messages 2012/09/15

[#399386] Ruby - is it worth the effort? — neomex <neomex@...>

Hello,

19 messages 2012/09/17
[#399406] Re: Ruby - is it worth the effort? — Roger Pack <lists@...> 2012/09/17

Unfortunately with Ruby for me it's typically "fun and fast development"

[#399409] Re: Ruby - is it worth the effort? — Peter Zotov <whitequark@...> 2012/09/17

Roger Pack писал 17.09.2012 22:06:

[#399491] Re: Ruby - is it worth the effort? — Robert Klemme <shortcutter@...> 2012/09/19

On Mon, Sep 17, 2012 at 8:20 PM, Peter Zotov <whitequark@whitequark.org> wr=

[#399421] Encoding question — Thomas Bednarz <lists@...>

I am new to ruby and play around with it a little bit at the moment. I

17 messages 2012/09/17

[#399441] Bug or feature — Damjan Rems <lists@...>

There has probably been some discussion about this problem so sorry if I

13 messages 2012/09/18

[#399451] Class variables — Aleksander Ciesielski <neomex@...>

Is it obligatory to use instance variables in classes? Can't we just

17 messages 2012/09/18

[#399479] Ruby SQL Select Sum 2 Columns? — Courtney Fay <lists@...>

I have the following definition which is looking at an apache database,

12 messages 2012/09/18

[#399556] still learning by doing - connecting rooms in a game — "Sebastjan H." <lists@...>

Hi,

28 messages 2012/09/20
[#399570] Re: still learning by doing - connecting rooms in a game — Henry Maddocks <hmaddocks@...> 2012/09/20

[#399574] Re: still learning by doing - connecting rooms in a game — "Sebastjan H." <lists@...> 2012/09/21

Henry Maddocks wrote in post #1076876:

[#399575] Re: still learning by doing - connecting rooms in a game — Henry Maddocks <hmaddocks@...> 2012/09/21

[#399576] Re: still learning by doing - connecting rooms in a game — "Sebastjan H." <lists@...> 2012/09/21

Could you be so kind as to suggest another book? I mean there are many

[#399585] Re: still learning by doing - connecting rooms in a game — "Sebastjan H." <lists@...> 2012/09/21

Sebastjan H. wrote in post #1076909:

[#399572] How would you allow variable from specific list of Fixnum? — Eliezer Croitoru <eliezer@...>

I have:

11 messages 2012/09/21

[#399623] Very important question - survey — Marc Heiler <lists@...>

Is matz more like a ninja or more like a samurai?

11 messages 2012/09/22

[#399695] inject problem — Roelof Wobben <rwobben@...>

26 messages 2012/09/25

[#399714] could initialize return an existing object instead of a new instance? — Gary Weaver <lists@...>

Is it possible for initialize to return an existing object instead of a

9 messages 2012/09/25

[#399811] Good book for getting started with Ruby? [I code Python!] — Alec Taylor <alec.taylor6@...>

I've learned programming in C++, Python and PHP at University. (also

12 messages 2012/09/28

[#399815] calcaulation with unknown numbers of numbers and options fail — Roelof Wobben <rwobben@...>

11 messages 2012/09/28

Re: Class variables or Class singleton variables?

From: Josh Cheek <josh.cheek@...>
Date: 2012-09-16 02:13:42 UTC
List: ruby-talk #399358
On Sat, Sep 15, 2012 at 1:41 PM, Dami=E1n M. Gonz=E1lez <lists@ruby-forum.c=
om>wrote:

> Guys, how are you?
>  Watch this simple code first:
>
>
> class Foo
>   @@x =3D 1
>   def self.x
>     @@x
>   end
>   def self.x=3D (y)
>     @@x =3D y
>   end
> end
>
> class << Foo
>   attr_accessor :x
>   @x =3D 1
> end
>
>
>  I'm developing an aplication, and I'm wondering which way of the both
> above I should use, or is recommended to use, I really need your advice,
> 'cause I'm noob. This is the point: the instances of Foo class almost
> will never access the class variable @@x. @@x is just a thing related
> with the class itself, which is accessed generally from outside the
> class, like...for example:
>
>
> class Dog
>   @@all_the_legs =3D 0
>   def initialize
>     @@all_the_legs +=3D 4
>   end
> end
>
>
>  And I just want to take a look sometimes at how many legs are...so:
>
>
> class Dog
>   def self.all_the_legs
>      @@all_the_legs
>   end
> end
>
>
>  This class variable will not be accessed anymore(after the initialize)
> by any instance. So I'm wondering if is better to do this instead:
>
>
> class << Dog
>   attr_accessor :all_the_legs
>   @all_the_legs =3D 0
> end
>
> class Dog
>   def initialize
>     Dog.all_the_legs +=3D 4
>   end
> end
>
>
>  Because I can see that if I choose the first way, and I want to Inherit
> a class from Dog, I will fail:
>
>
> class Dogo < Dog
>   @@all_the_legs =3D 0 #with and without this line: same result for both
>   def initialize
>      @@all_the_legs +=3D 4
>   end
>   def self.all_the_legs
>      @@all_the_legs
>   end
> end
>
> Dog.new; Dog.new; Dog.new; Dog.all_the_legs
> #=3D> 12
> Dogo.new; Dogo.new; Dogo.new; Dogo.all_the_legs
> #=3D> 24
>
>
>   I have examples like this in my whole source code, so I'm thinking
> which way to take. Hope you can view my point(the example could not be
> the best): I need your advice about if is good to use class variables if
> you almost don't use it for the access of instances, instead you need to
> require that information from outside the class(suppose that I want to
> maintain in a GUI the amount of legs that share all the dogs). It is
> good in this cases to enter the singleton class of a class and define
> accessors and instance variables to later be accessed? Thank you all.
>
>
The instance variable solution is better, I advocate never using class
variables for the reason that you showed.

Singletons tend to force you into a workflow that you will later regret. So
these days, I try fairly hard to avoid them. For your example, where it
sounds like it is just a trick for debugging / getting information, and it
has very little behaviour, I'd probably do what you're doing (I'm assuming
we're deleting this code after we decide that it's doing what we think it
is).

If it were more complex than just incrementing a counter, or if you were
planning on keeping it around for a while, I'd probably try to create some
other object to handle the behaviour, then just store an instance of that
object on this class. Maybe something like this:

class Counter
  attr_reader :count

  def initialize(increment, count=3D0)
    @increment =3D increment
    @count     =3D count
  end

  def count!
    @count +=3D @increment
  end
end

class Dog
  def self.leg_count
    @leg_counter.count
  end

  def self.new(*)
    @leg_counter.count!
    super
  end

  def self.reset!
    @leg_counter =3D Counter.new 4
  end
  reset!
end

Dog.leg_count # =3D> 0
Dog.new
Dog.leg_count # =3D> 4
Dog.new
Dog.leg_count # =3D> 8
Dog.reset!
Dog.leg_count # =3D> 0


In this example, it's of course overkill, but for something with more
complex behaviour, try to get it where you can deal with it outside of the
constraints of the singleton (e.g. to test it or to use it in a different
way than imagined).

Also, since I don't know what you're doing with it, let me warn against
tracking all the instances in some collection. This will prevent them from
being garbage collected, and will prevent you from being able to create
instances where that is not the case (e.g. when you subclass pretty much
anything in Rails, it tracks that and then does things with it that you may
reasonably want it to not do).

In This Thread