gpt4 book ai didi

ruby-on-rails - Rails 模块中的 mattr_accessor 是什么?

转载 作者:数据小太阳 更新时间:2023-10-29 06:17:58 33 4
gpt4 key购买 nike

我真的无法在 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(模块访问器)和 cattr_accessor(以及 _reader/_writer 版本)。由于 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"

关于ruby-on-rails - Rails 模块中的 mattr_accessor 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/185573/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com