Adding a new method to a class

  • Thread starter Mickael Faivre-Macon
  • Start date
M

Mickael Faivre-Macon

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
 
M

MonkeeSage

Mickael said:
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
 
R

Robert Klemme

Mickael said:
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
 
M

Mickael Faivre-Macon

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

Mickael.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,819
Latest member
masterdaster

Latest Threads

Top