Accessor methods for class methods

It seems odd that cattr_* (i.e. cattr_accessor, cattr_reader,
cattr_writer) is not in the native Ruby and that you have to require
active support and rubygems to get this to work. Including the rails
stuff appears to slow things down a little. Why is this not built in the
native Ruby source?

···

--
Posted via http://www.ruby-forum.com/.

Note that you can do the same using:

···

El Viernes, 5 de Septiembre de 2008, Jason Lillywhite escribió:

It seems odd that cattr_* (i.e. cattr_accessor, cattr_reader,
cattr_writer) is not in the native Ruby and that you have to require
active support and rubygems to get this to work. Including the rails
stuff appears to slow things down a little. Why is this not built in the
native Ruby source?

------------
class MyClass
  
  class << self
    attr_accessor :class_attribute_1, :class_attribute_2
  end

end
-----------

So you can use it:

----------
MyClass.class_attribute_1 = something
---------

--
Iñaki Baz Castillo

Hi --

It seems odd that cattr_* (i.e. cattr_accessor, cattr_reader,
cattr_writer) is not in the native Ruby and that you have to require
active support and rubygems to get this to work. Including the rails
stuff appears to slow things down a little. Why is this not built in the
native Ruby source?

I can't answer that directly, but I can tell you why I'm glad it
isn't. It's partly that class variables are a bit oddball to start
with, and I'm not eager to see them used a lot more. But it's also the
terminology.

An "attribute" is, or should be, an attribute of an object. But class
variables are not object-specific; they're very promiscuous, visible
to a class, its instances, and all the subclasses and all their
instances.

Therefore, a class variable is not an appropriate choice for
representing an "attribute". The fit between instance variables, as a
language-level construct, and "attribute", as a concept, is very good;
but class variables are very different from instance variables, and
the "attr" terminology is very loose. (The methods may have uses, but
the names are problematic.)

David

···

On Sat, 6 Sep 2008, Jason Lillywhite wrote:

--
Rails training from David A. Black and Ruby Power and Light:
   Intro to Ruby on Rails January 12-15 Fort Lauderdale, FL
   Advancing with Rails January 19-22 Fort Lauderdale, FL *
   * Co-taught with Patrick Ewing!
See http://www.rubypal.com for details and updates!

It seems odd that cattr_* (i.e. cattr_accessor, cattr_reader,
cattr_writer) is not in the native Ruby

I can not answer this but personally I have stopped using class
variables after
- i had a smallish bug which was caused by a stupid usage I did long ago
of a class variable
- there really is not a huge need to use a class var in the first place
(in my opinion and experience).

So personally, for me, I have found that I can live perfectly happy
without class vars, and in these times, whenever I can achieve the same
with a very simple easy route, I use it. There may be a few valid use
cases for a class var but I honestly have never seen them as being very
important.

···

--
Posted via http://www.ruby-forum.com/\.

Thanks. That makes sense. I want to do what is simplest, but it seems
without cattr things would get worse. Here is what I'm trying to do:

I have one rb file used for inputs:

require 'rubygems'
require 'activesupport'
  class Input
    cattr_reader :y
    def self.y
      @y = 2
    end
  end

**except I have lots of vars instead of just :y and I'm assigning them
values here.

Then I go to a new rb file and do this:

require 'firstfile.rb'
class NewClass
  def do_something
    Input.y * 2.3
  end
end

new = NewClass.new
p new.do_something

**The fact that I need to say "Input.y" seems very bulky. Is there a
better way to do this? Plus, if I get away from class vars, it will get
bulkier. any ideas?

···

--
Posted via http://www.ruby-forum.com/.

HI --

···

On Sat, 6 Sep 2008, Jason Lillywhite wrote:

Thanks. That makes sense. I want to do what is simplest, but it seems
without cattr things would get worse. Here is what I'm trying to do:

I have one rb file used for inputs:

require 'rubygems'
require 'activesupport'
class Input
   cattr_reader :y
   def self.y
     @y = 2
   end
end

**except I have lots of vars instead of just :y and I'm assigning them
values here.

Then I go to a new rb file and do this:

require 'firstfile.rb'
class NewClass
def do_something
   Input.y * 2.3
end
end

new = NewClass.new
p new.do_something

**The fact that I need to say "Input.y" seems very bulky. Is there a
better way to do this? Plus, if I get away from class vars, it will get
bulkier. any ideas?

You're not actually using any class variables in your example. If you
delete the cattr_reader line, the code still runs. You're writing a
"reader" method (Input.y) by hand, and it's using an instance
variable, not a class variable (an instance variable belonging to the
class Input itself).

David

--
Rails training from David A. Black and Ruby Power and Light:
   Intro to Ruby on Rails January 12-15 Fort Lauderdale, FL
   Advancing with Rails January 19-22 Fort Lauderdale, FL *
   * Co-taught with Patrick Ewing!
See http://www.rubypal.com for details and updates!