我在 Ruby 中有一个非数据库支持的类:
class User
attr_accessor :countries
end
Run Code Online (Sandbox Code Playgroud)
我希望国家只是一组 ISO 国家代码(美国、GB、CA、AU 等),我不想建立一个单独的模型来保存每个国家代码。有没有一种神奇的方法可以让 Ruby 理解这:countries是一个数组并相应地对待它,或者我是否需要编写countriesandcountries=方法?
我尝试使用 user.countries = ['US'] 设置国家数组,但我收到了 NoMethodError。
变量的类型在 Ruby 中无关紧要。
attr_accessor只创建设置和返回实例变量的 getter 和 setter 方法;@countries在这种情况下。您可以将实例变量设置为数组,或使用 setter:
class User
attr_accessor :countries
def initialize
@countries = %w[Foo Bar Baz]
# Or...
self.countries = %w[Foo Bar Baz]
end
end
> puts User.new.countries
=> ["Foo", "Bar", "Baz"]
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢使用实例变量而不是self.xxx; 忘记这self.一点太容易了,你最终设置了一个局部变量,留下了实例变量nil。我也觉得丑
如果国家不会在实例之间发生变化,为什么不是一个常数?
编辑/澄清
塔德曼的观点很好理解,例如,对国家的这种谩骂。我不关心的情况仅限于小型的、自我控制的、独立的类。做出这些假设存在固有风险,这些风险的水平取决于项目。
| 归档时间: |
|
| 查看次数: |
3067 次 |
| 最近记录: |