我使用的是其他客戶,如twitter
寶石,redditkit
和octokit.rb
,才能夠訪問存儲在屬性與attr_reader
或attr_accessor
用戶都使用模型創建API包裝的reddit的樂趣散列。attr_reader紅寶石API包裝
是否有任何標準或原因,爲什麼返回值需要在模型中明確聲明,而不是有一個method_missing
從哈希中獲取值?爲什麼它必須是這樣的:
class Something
def self.attr_reader(meth)
define_method(meth) { @attributes[meth] }
end
attr_reader :thing1
attr_reader :thing2
attr_reader :tedium
...
而不是
class Something
def method_missing(meth, args)
if @attributes.has_key?(meth)
@attributes[meth]
else
send(:meth, *args)
end
end
-1簡單的工作。您對method_missing的定義不合語法。一個方法不能接受符號':meth'作爲變量名(除非是指定參數),並且它不適用於attr讀取器方法,因爲您將傳遞零參數,但期望的參數將是一個。順便說一句,「@ attributes」是什麼?不要在沒有解釋的情況下引入變量。 – sawa