gpt4 book ai didi

具有数组属性的 Ruby 类

转载 作者:太空宇宙 更新时间:2023-11-03 17:16:20 26 4
gpt4 key购买 nike

我在 Ruby 中有一个非数据库支持的类:

class User
attr_accessor :countries
end

我希望国家/地区只是一组 ISO 国家/地区代码(美国、英国、加拿大、澳大利亚等),我不想构建一个单独的模型来保存每个国家/地区代码。有没有一种神奇的方法可以让 Ruby 理解 :countries 是一个数组并相应地对待它,或者我需要编写 countriescountries= 方法?

我尝试使用 user.countries = ['US'] 设置国家数组,但我收到了 NoMethodError。

最佳答案

变量的类型在Ruby 中并不重要。

attr_accessor 只是创 build 置和返回实例变量的 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"]

我个人更喜欢使用实例变量而不是self.xxx;很容易忘记 self. 位,您最终设置了一个局部变量,留下了实例变量 nil。我也觉得很丑。

如果国家不会在实例之间发生变化,为什么不是常量?

编辑/澄清

Tadman 的观点很好,例如,this diatribe on state .我不关心的情况仅限于小型的、 self 控制的、独立的类(class)。做出这些假设存在固有风险,这些风险的级别取决于项目。

关于具有数组属性的 Ruby 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18986081/

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