Adding a new method to a class

Hi,

What is called the process of adding a new method of an already defined class ?

For example:

class A
   def a
   end
end

And in another file:

class A
   def b
   end
end

And now my real question:

What if I want to declare a new class variable in the initialize method ?
If it's a derived class I can call super:
def initialize
   super
   @my_var = ""
end

but if it not derived ?
How can I do this ?

Thanks,
Mickael

Mickael Faivre-Macon wrote:

What is called the process of adding a new method of an already defined class ?

Hi Mickael,

I'm not sure of any official technical name but I often see "extend"
used for a previously undefined method and "override" for redefining an
existing method.

What if I want to declare a new class variable in the initialize method ?
If it's a derived class I can call super:
def initialize
   super
   @my_var = ""
end

but if it not derived ?
How can I do this ?

Well a @var is an instance variable, a class variable has two @, like
@@var. but in either case, you would just add it (in ruby you just
assign to a variable and it comes into existence, not need to "declare"
them any special way).

class Tree
  def initialize
    @cat = 'in it'
    @@dog = 'bark'
  end
end

Regards,
Jordan

Mickael Faivre-Macon wrote:

Hi,

What is called the process of adding a new method of an already defined class ?

For example:

class A
  def a
  end
end

And in another file:

class A
  def b
  end
end

And now my real question:

What if I want to declare a new class variable in the initialize method ?
If it's a derived class I can call super:
def initialize
  super
  @my_var = ""
end

but if it not derived ?
How can I do this ?

You can alias the old initialize method and replace it with another one:

irb(main):014:0> class A
irb(main):015:1> def initialize(x)
irb(main):016:2> @foo = x
irb(main):017:2> end
irb(main):018:1> end
=> nil
irb(main):019:0> a = A.new 10
=> #<A:0x38e4d0 @foo=10>
irb(main):020:0> class A
irb(main):021:1> alias initialize_old initialize
irb(main):022:1> def initialize(x)
irb(main):023:2> initialize_old x
irb(main):024:2> @bar = "foo"
irb(main):025:2> end
irb(main):026:1> end
=> nil
irb(main):027:0> b = A.new 20
=> #<A:0x374610 @bar="foo", @foo=20>

Kind regards

  robert

Hi,

What is called the process of adding a new method of an already defined
class ?

Actually that is the *only* way to add a method to a class. In Ruby the
class is already defined inside it's declaration, for what I think one of
the many brilliant ideas of Matz.
Look at this code for demonstration
def who_am_I *objs
    objs.each do
        >obj>
        p "#{obj.name}:#{obj.class} @ %08x " % obj.object_id
    end #objs.each do
end

class A
    who_am_I self
    def a; 42; end
end
who_am_I A
class A
    who_am_I self
    def b; 1764; end
end

For example:

class A
   def a
   end
end

And in another file:

class A
   def b
   end
end

which would be the same as
class A
   def a
   def b
end

And now my real question:

What if I want to declare a new class variable in the initialize method ?

Robert had already answered that 1 brilliantly, so why should Robert answer
that one brilliantly?

If it's a derived class I can call super:

def initialize
   super
   @my_var = ""
end

but if it not derived ?
How can I do this ?

Thanks,
Mickael

Cheers
Robert

···

On 9/24/06, Mickael Faivre-Macon <faivrem@gmail.com> wrote:

--
Deux choses sont infinies : l'univers et la bêtise humaine ; en ce qui
concerne l'univers, je n'en ai pas acquis la certitude absolue.

- Albert Einstein

Thank you MonkeeSage for your precisions.
Thanks Robert, that's what I was looking for.

Mickael.

···

On 9/24/06, Robert Klemme <shortcutter@googlemail.com> wrote:

Mickael Faivre-Macon wrote:
> Hi,
>
> What is called the process of adding a new method of an already defined
> class ?
>
> For example:
>
> class A
> def a
> end
> end
>
> And in another file:
>
> class A
> def b
> end
> end
>
> And now my real question:
>
> What if I want to declare a new class variable in the initialize method ?
> If it's a derived class I can call super:
> def initialize
> super
> @my_var = ""
> end
>
> but if it not derived ?
> How can I do this ?

You can alias the old initialize method and replace it with another one:

irb(main):014:0> class A
irb(main):015:1> def initialize(x)
irb(main):016:2> @foo = x
irb(main):017:2> end
irb(main):018:1> end
=> nil
irb(main):019:0> a = A.new 10
=> #<A:0x38e4d0 @foo=10>
irb(main):020:0> class A
irb(main):021:1> alias initialize_old initialize
irb(main):022:1> def initialize(x)
irb(main):023:2> initialize_old x
irb(main):024:2> @bar = "foo"
irb(main):025:2> end
irb(main):026:1> end
=> nil
irb(main):027:0> b = A.new 20
=> #<A:0x374610 @bar="foo", @foo=20>

Kind regards

        robert