Was ist mattr_accessor in einem Rails-Modul?
-
06-07-2019 - |
Frage
ich das nicht wirklich in Rails Dokumentation finden könnte, aber es scheint, wie 'mattr_accessor' ist die Modul logische Folge für 'attr_accessor' ( Getter & Setter) in einer normalen Ruby- Klasse .
Eg. in einer Klasse
class User
attr_accessor :name
def set_fullname
@name = "#{self.first_name} #{self.last_name}"
end
end
Eg. in einem Modul
module Authentication
mattr_accessor :current_user
def login
@current_user = session[:user_id] || nil
end
end
Diese Hilfsmethode wird zur Verfügung gestellt von Active .
Lösung
Schienen erstreckt Rubin sowohl mit mattr_accessor
(Modul Accessor) und cattr_accessor
(sowie _reader
/ _writer
Versionen). Als Rubys attr_accessor
erzeugt Getter / Setter-Methoden für Instanzen , cattr/mattr_accessor
bieten Getter / Setter-Methoden an der Klasse oder Modul Ebene. Also:
module Config
mattr_accessor :hostname
mattr_accessor :admin_email
end
ist die Abkürzung für:
module Config
def self.hostname
@hostname
end
def self.hostname=(hostname)
@hostname = hostname
end
def self.admin_email
@admin_email
end
def self.admin_email=(admin_email)
@admin_email = admin_email
end
end
Beide Versionen können Sie die Variablen auf Modulebene für den Zugriff auf in etwa so:
>> Config.hostname = "example.com"
>> Config.admin_email = "admin@example.com"
>> Config.hostname # => "example.com"
>> Config.admin_email # => "admin@example.com"
Andere Tipps
Hier die Quelle für cattr_accessor
Und
Hier die Quelle für mattr_accessor
Wie Sie sehen können, sind sie ziemlich identisch.
Wie, warum gibt es zwei verschiedene Versionen? Manchmal möchten Sie cattr_accessor
in einem Modul schreiben, so können Sie es für die Konfiguration info verwenden