ruby-on-rails – 什么是mattr_accessor在Rails模块?

我不能真正地在Rails文档中找到这个,但似乎’mattr_accessor’是’attr_accessor'(getter& setter)在一个普通的Ruby类的模块推论。

例如。在类中

class User
  attr_accessor :name

  def set_fullname
    @name = "#{self.first_name} #{self.last_name}"
  end
end

例如。在模块中

module Authentication
  mattr_accessor :current_user

  def login
    @current_user = session[:user_id] || nil
  end
end

此辅助方法由ActiveSupport提供。

Rails使用mattr_accessor(Module accessor)和cattr_accessor(以及_reader / _writer版本)扩展了Ruby。由于Ruby的attr_accessor为实例生成getter / setter方法,cattr / mattr_accessor在类或模块级别提供getter / setter方法。从而:

module Config
  mattr_accessor :hostname
  mattr_accessor :admin_email
end

是缩写:

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

这两个版本允许您访问模块级变量,如:

>> Config.hostname = "example.com"
>> Config.admin_email = "admin@example.com"
>> Config.hostname # => "example.com"
>> Config.admin_email # => "admin@example.com"
http://stackoverflow.com/questions/185573/what-is-mattr-accessor-in-a-rails-module

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:ruby-on-rails – 什么是mattr_accessor在Rails模块?