[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Adding a new method to a class

Mickael Faivre-Macon

9/24/2006 7:41:00 PM

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

3 Answers

MonkeeSage

9/24/2006 8:01:00 PM

0

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

Robert Klemme

9/24/2006 8:16:00 PM

0

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

Mickael Faivre-Macon

9/24/2006 8:33:00 PM

0

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