In Ruby, there is always an implicit receiver for all method calls. The language keeps a reference to the current implicit receiver stored in the variable
self. Certain language keywords like
module will change what
self points to. Understanding these behaviors is very helpful in mastering the language.
For example, when you first open
irb(main):001:0> self => main
In this case the
main object is the implicit receiver (see http://stackoverflow.com/a/917842/417872 for more about
You can define methods on the implicit receiver using the
def keyword. For example:
irb(main):001:0> def foo(arg) irb(main):002:1> arg.to_s irb(main):003:1> end => :foo irb(main):004:0> foo 1 => "1"
This has defined the method foo on the instance of main object running in your repl.
Note that local variables are looked up before method names, so that if you define a local variable with the same name, its reference will supersede the method reference. Continuing from the previous example:
irb(main):005:0> defined? foo => "method" irb(main):006:0> foo = 1 => 1 irb(main):007:0> defined? foo => "local-variable" irb(main):008:0> foo => 1 irb(main):009:0> method :foo => #<Method: Object#foo>
method method can still find the
foo method because it doesn't check for local variables, while the normal reference