Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When to use `self.foo` instead of `foo` in Ruby methods

Tags:

ruby

self

This is not specific for Rails - I am just using Rails as an example.

I have a model in Rails:

class Item < ActiveRecord::Base    def hello     puts "Hello, #{self.name}"   end end 

(Let's assume that the Item model (class) has a method called name.) When do I need to use self.name and when can I just use name (e.g., #{name})?

like image 279
jriff Avatar asked Jan 15 '11 12:01

jriff


People also ask

Does Ruby use self?

self is a special variable that points to the object that "owns" the currently executing code. Ruby uses self everwhere: For instance variables: @myvar. For method and constant lookup.

Does method order matter in Ruby?

You could define method in any order, the order doesn't matter anything.

What does method do in Ruby?

A method in Ruby is a set of expressions that returns a value. With methods, one can organize their code into subroutines that can be easily invoked from other areas of their program. Other languages sometimes refer to this as a function. A method may be defined as a part of a class or separately.


1 Answers

  1. It is idiomatic to prefer to omit self. when invoking methods; it is generally never needed.

  2. You must use self.foo = xxx when calling a setter method, instead of foo = xxx, so that Ruby realizes that you are not trying create a new local variable.

    • Similarly, in the unlikely event that you have an existing local variable do_something with the same name as a method, you must use self.do_something to invoke the method, as just do_something will end up reading the variable.
  3. You cannot use self.foo(...) to call a private method; you must instead call just foo(...).

like image 79
Phrogz Avatar answered Sep 21 '22 13:09

Phrogz