From: Dimitrios Galanakis Date: 2003-10-03T04:47:49+09:00 Subject: Re: newbie question: function overloading I was expecting an answer like that... I wanted to ask then if operator overloading if exactly similar to function overloading. I would like for example to define my own complex class. In this canse the * operator will perform differencly when multiplying a real and a complex and when multiplying two complex numbers (this is almost what I need to do only the difference is that instead of a complex class I have some other class for which it makes sence to multiply objects of that class together and with real numbers). In other words how can I simplify the following code by removing the ifs? class complex def *(something) result=self.dup if something.kind_of?(Numeric) result.real*=something result.imag*=something return result end if something.kind_of(complex) result.real=result.real*something.real-result.imag*something.imag ... etc etc etc end end end Chad Fowler wrote: > On Fri, 3 Oct 2003, Dimitrios Galanakis wrote: > > # I need to define a method that performs differently when operated on objects > # of different type (overloading). Currently I use various if's to check for > # the type of the object as follows: > # > > There are really two answers to this: > > 1) Ryan Pavlik has created a library that provides overloading capability > like this. You could give it a try and it might feel right to your C++ > ways. > 2) I would lean more heavily toward this one: The Ruby Way to accomplish > what you're trying to accomplish very likely isn't to check type in this > way. I remember coming to Ruby from C++/Java and wondering why I couldn't > do method overloading like this. My brain was wired into the static > typing way of doing things and I even felt like overloading was almost > a necessary part of OO. It didn't take long before I stopped feeling the > need for this capability as I started reading existing code and > understanding the Ruby idioms better. > > Maybe if you could post a more specific example/statement of what you're > trying to accomplish, we could see about helping you with option #2. > > Chad > >