Forum: Ruby What's the difference in calling method vs self.method?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Jim (Guest)
on 2005-12-31 20:50
(Received via mailing list)
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
Joseph D. (Guest)
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.
Tool69 (Guest)
on 2005-12-31 20:59
(Received via mailing list)
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 ?
Jim (Guest)
on 2005-12-31 21:08
(Received via mailing list)
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?
=?UTF-8?B?TWFyY2luIE1pZWzFvHnFhHNraQ==?= (Guest)
on 2005-12-31 21:14
(Received via mailing list)
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
Ross B. (Guest)
on 2005-12-31 21:59
(Received via mailing list)
On Sat, 31 Dec 2005 19:11:37 -0000, Marcin MielżyÅ?ski
<removed_email_address@domain.invalid>
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
This topic is locked and can not be replied to.