这是这my code already works but I'd like to make it simpler个问题中的一个.

所以我有一个类似这样的模块:

module MyMod
    @property = 'whatever'
    
    def self.property
        return @property
    end
    
    def self.property=(value)
        return @property = value
    end
end

puts MyMod.property # => whatever
MyMod.property = 'dude'
puts MyMod.property # => dude

好的,这样就行了.但我希望使用类似attr_accessor这样的东西来方便,但对于模块而不是类.有这样的事吗?

推荐答案

您可以在模块的单例类(通常也称为"特征类")中定义访问器,它基本上是对象(在本例中:模块)的祖先链中的一个模块,该对象是唯一的.因此,您可以在这里定义也可以在对象的类上下文中定义的内容.

module MyMod
  @property = 'whatever'

  class << self
    attr_accessor :property
  end
end

MyMod.property
# => "whatever"

MyMod.property = "something else"
MyMod.property
# => "something else"

Ruby相关问答推荐

Ruby迭代器与函数.返回函数的第一个值,而不交互整个列表

Ruby 扁平化 JSON 对象或哈希

警告 Selenium [弃用] Manager#logs 已弃用.使用 Chrome::Driver#logs 代替

Homebrew 的 ruby​​ 和Homebrew Ruby有什么区别?

为什么数组中的 splat 如此昂贵?

判断数组中的字符串是否包含另一个数组中的子字符串

为什么我的二维 Ruby 数组的多个值会发生变化,尽管只更改了其中一个?

如何解密在 sjcl.js 中使用 ruby​​ 创建的 AES-256-GCM

如何使 Sinatra 通过 HTTPS/SSL 工作?

何时在 Ruby 方法中使用 `self.foo` 而不是 `foo`

Ruby 哈希文字的顺序是否得到保证?

Ruby:如何判断字符是大写还是小写

如何在 VIM 中导航 Ruby 方法?

使用 Homebrew 安装 Ruby

object_id 分配如何工作?

在命名包含多个单词的Ruby 时,是否应该使用破折号或下划线?

如何在 Ruby 的 IRB 中启用自动完成

使用哈希值呈现 ERB 模板

如何在 Capistrano v3 的服务器上运行 shell 命令?

JavaScript Array:获取项目的范围