Can anyone explain the difference between accessing an instance attribute via self.attribute and by @attribute?
2 Answers
self.attribute calls the method attribute.
self.attribute = value calls the method attribute= with the argument value.
@attribute and @attribute = value get/set the value of the instance variable @attribute.
So basically they're two entirely different things.
However if you call attr_accessor :attribute it defines the method attribute to return @attribute and the method attribute=(value) to set @attribute = value. So in that case, there is no difference.
2 Comments
self. (unless you're writing the getter/setter method) even if you currently have attr_accessor. This protects you from additional refactor work and bugs if you later change the accessor method(s) to do more than just get/set the instance variable. (Or if someone else patches or subclasses your work.)"Accessing instance variable directly is about two times faster than accessing them with accessor methods"
Check out the: https://www.greyblake.com/blog/2012-09-01-ruby-perfomance-tricks/