для чего я?Я думал, что это может быть аксессор
По крайней мере, это метод - вероятно, аксессор.self.name = something
вызовет метод name=
и self.name
, или, если не существует локальной переменной с именем name
, просто name
вызовет метод name
.
, но затем можетразве это не просто имя_пользователя вместо self.user_name?
При вызове метода name=
необходим self
, поскольку name = something
просто создаст локальную переменную с именем name
.При вызове метода name
не имеет значения, пишете ли вы name
или self.name
, если только не существует локальной переменной с именем name
.
И я даже несм. любой код, делающий его средством доступа, например attr_accessor, но не в базовом классе.
Если нет вызова attr_accessor
и нет явного определения name
и name=
в любом месте они могут обрабатываться method_missing
или определяться другим методом, отличным от attr_accessor
.
не совпадает с self.user_name как @ user_name
Только если это определено.Если вы определите user_name
и user_name=? using
attr_accessor they will get and set
@ user_name`.Однако если вы определяете их с помощью других средств (или вручную), они могут делать все, что вы захотите.
Например, ActiveRecord использует method_missing
для «определения» методов получения и установки, которые соответствуют столбцам базы данных.Поэтому, если ваш класс ActiveRecord принадлежит таблице со столбцом user_name
, вы будете иметь методы user_name
и user_name=
, не определяя их где-либо.Значения, возвращаемые user_name
и установленные user_name =
, также не будут соответствовать переменным экземпляра.Т.е. не будет никакой переменной экземпляра с именем @user_name
.
Другой способ автоматического определения user_name
и user_name=
без использования переменных экземпляра - Struct
:
MyClass = Struct.new(:user_name)
Здесь MyClass
будет иметь методы user_name
и user_name=
, но никакая переменная экземпляра @user_name
не будет установлена ни в одной точке.