I was reading a Ruby book and came across this definition of the pseudo-variable self:
self - receiver object of the current method
self is a special variable that changes depending on the context. To be more specific, it is receiver object of the current method, as you mentioned. To understand this, we need to understand what receiver means.
See Programming Ruby: More About Methods and Classes and Objects.
You call a method by specifying a receiver, the name of the method, and optionally some parameters and an associated block.
connection.downloadMP3("jitterbug") { |p| showProgress(p) }
In this example, the object
connectionis the receiver,downloadMP3is the name of the method,"jitterbug"is the parameter, and the stuff between the braces is the associated block.
foo = "hello"
bar = foo.dup
class <
In foo.twoTimes, foo part is called the receiver of the method call.
So, within the twoTimes method, self refers to the object foo in the context.
There is also a very good explanation here