Here's some example code. In method_b, what is the difference in calling method_a and self.method_a? class HoHo def method_a puts "Hello, HoHo" end def method_b method_a self.method_a end end hoho = HoHo.new hoho.method_b
on 2005-12-31 20:50
on 2005-12-31 20:57
Jim wrote: > Here's some example code. In method_b, what is the difference in > calling method_a and self.method_a? > I am sure that the more experienced coders will speak up soon, but until then Ill do my best. The self. is implied when you call the method.. just as self.puts or self.gets are often written puts or gets respectively.. Hope that makes sense.
on 2005-12-31 20:59
I see no difference indeed, but I'm a Ruby beginner...This is a Ruby shortcut I think, all method calls inside a class are supposed to be applied to the called "self" object. Maybe to avoid some "heavy" Python syntax in wich you'll always see "this.method". Am I wrong ?
on 2005-12-31 21:08
Jim wrote: > Here's some example code. In method_b, what is the difference in > calling method_a and self.method_a? I just had a thought that it may very well make a difference in the case of a conflict method names. For example if you had (puposely or not) created 2 method_a's in the same scope. Make sense?
on 2005-12-31 21:14
Jim wrote: > Here's some example code. In method_b, what is the difference in > calling method_a and self.method_a? > In Your code it makes no difference, however there are situations when You'll have to explicitly resolve method invocation, consider: class C def meth1 end def meth2 meth1 # no problem, but.. meth1=4 # variable assignment self.meth1 # so we have to resolve it as a method end end other thing is operator method invocation: class D def + arg p arg end def meth + 2 # Ruby sees it as unary plus, aka +@ self + 2 # explicit end end lopex
on 2005-12-31 21:59
On Sat, 31 Dec 2005 19:11:37 -0000, Marcin MielÅ¼yÅ?ski <email@example.com> wrote: > end > class D > end > > Somewhat related to the above is the following case: class Clz attr_accessor :myattr def amethod # doesn't work, Ruby treats as local assignment # myattr = 5 # We have to be explicit. self.myattr = 5 end end Another area I guess it could make a difference is: class ClzToo def amethod # doesn't work, private methods cannot be called # with a receiver. # puts self.aprivate # So we can only call without 'self' puts aprivate end private def aprivate "private" end end