I’m pretty new to Ruby myself, I’ve kinda learned as required so I’m patchy.
From what I’ve seen however, I think ‘self’ is relative to the current scope, i.e instance or class. Where as @ is always in instance scope.
Ian.
I’m pretty new to Ruby myself, I’ve kinda learned as required so I’m patchy.
From what I’ve seen however, I think ‘self’ is relative to the current scope, i.e instance or class. Where as @ is always in instance scope.
Ian.
self is the object itself.
self.name is saying that there’s a public method on self to be called (attr_reader :name)
@name says ‘get the instance variable @name for this class instance’
Use ‘self’ pretty much the same way you’d use ‘this’ in Java or C++, though not in the cases that you can use @ (passing yourself to another method is the most used example).
Jason
Hi --
First: I'm new to Ruby
Simple model:
class Product < ActiveRecord::Base
def save STDERR << "save: " << @name << "\n" STDERR << "save: " << self.name << "\n" end end
I thought that both lines should give the same result...
I'm pretty new to Ruby myself, I've kinda learned as required so I'm patchy.
From what I've seen however, I think 'self' is relative to the current scope, i.e instance or class. Where as @ is always in instance scope.
self is the "default object". There's always one and only one self at any point in a Ruby program.
Since classes are objects, self can be a class:
class SelfTest p self end # => output: SelfTest
Instance variables are a way for individual objects (including Class objects) to store information and maintain state. Every object has its own instance variables.
There's a tight connection between instance variables and self: whenever you see @var, @name, etc., you're seeing an instance variable that belongs to self.
self is the object itself.
self.name is saying that there's a public method on self to be called (attr_reader :name)
All it really says is that you're sending the message 'name' to the object self. Usually you do that in cases where there's a corresponding method -- but not always.
attr_reader isn't connected to this; there are many methods you can call on objects that aren't created with attr-reader.
@name says 'get the instance variable @name for this class instance'
More precisely: @name is the instance variable @name belonging to self (whatever self is at that given moment in runtime).
David