Alle luned 13 agosto 2007, Frank Meyer ha scritto:
> Hello,
> are these keywords or are they methods which create get/set methods for
> the given attribute?
>
> I suppose it's a mix of both, because I tried to write my own
> attr_accessor but I  couldn't call it in the class definition, only on
> an existing object.
>
>
>
>
> Turing.

They're instance method of the Module class. You can write them, if you want:

class Module
  
  def my_attr_reader *args
    args.each do |a|
      define_method(a) do
        puts 'this method was generated by my_attr_reader';
        instance_variable_get("@#{a}")
      end
    end
  end

end

class C
  my_attr_reader :x

  def initialize x
    @x = x
  end
end

res = C.new(2).x
=> this method was generated by my_attr_reader
puts res
=> 2

Defining my_attr_reader in class Module will make it availlable in all classes 
and modules. You can define it in class Class to make it availlable only in 
classes, or you can define them in a single class. In this case, however, it 
should be defined as a class method, not as an instance method:

class MyClass
  def self.my_attr_reader
  ...

I hope this helps

Stefano