我正在使用其他客户端(例如twitter
gem,redditkit
和octokit.rb
)为reddit创建一个API包装器,它们都使用带有attr_reader
或{的模型{1}}用户可以访问存储在哈希中的属性。
是否有任何标准或原因需要在模型中明确声明返回值,而不是让attr_accessor
从哈希中获取值?为什么需要这样:
method_missing
而不是
class Something
def self.attr_reader(meth)
define_method(meth) { @attributes[meth] }
end
attr_reader :thing1
attr_reader :thing2
attr_reader :tedium
...
答案 0 :(得分:1)
attr_reader
没有通过返回@attributes[:thing]
来实现getter,而是返回@thing
。它是安全的(你只得到你声明的内容 - 恶意代码无法在你的对象中隐藏自己的数据等。)
如果你想要一个具有完全动态属性的对象,可以有它的实现(比如OpenStruct
),或者你可以直接使用Hash
es ...