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:

end
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

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

Mickael.

On 9/24/06, Mickael Faivre-Macon [email protected] wrote:

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:

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:

Cheers
Robert


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