Bezpośredni dostęp do zmiennej instancji a Korzystanie z metody accessor

Czy ktoś może wyjaśnić różnicę między uzyskaniem dostępu do atrybutu instancji przez self.attribute i przez @attribute?

Author: sawa, 2011-01-09

2 answers

self.attribute wywołuje metodę attribute.
self.attribute = value wywołuje metodę {[3] } z argumentem value.
@attribute and @attribute = value get / set the value of the instance variable @attribute.

Więc zasadniczo są to dwie zupełnie różne rzeczy.

Jeśli jednak wywołasz attr_accessor :attribute definiuje metodę attribute zwracającą @attribute, a metodę attribute=(value) ustawiającą @attribute = value. Więc w takim przypadku nie ma różnicy.

 98
Author: sepp2k,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-03 06:34:53

"bezpośredni dostęp do zmiennej instancji jest około dwa razy szybszy niż dostęp do niej metodami accessor"

Zobacz: http://greyblake.com/blog/2012/09/02/ruby-perfomance-tricks/

 2
Author: meso_2600,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-12 09:16:18