ruby API包装器中的attr_reader

时间:2014-07-24 11:55:30

标签: ruby api

我正在使用其他客户端(例如twitter gem,redditkitoctokit.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
  ...

1 个答案:

答案 0 :(得分:1)

attr_reader没有通过返回@attributes[:thing]来实现getter,而是返回@thing。它是安全的(你只得到你声明的内容 - 恶意代码无法在你的对象中隐藏自己的数据等。)

如果你想要一个具有完全动态属性的对象,可以有它的实现(比如OpenStruct),或者你可以直接使用Hash es ...