class Numeric
@@currencies = {'yen' => 0.013, 'euro' => 1.292, 'rupee' => 0.019}
def method_missing(method_id, *args, &block)
singular_currency = method_id.to_s.gsub(/s$/, '')
if @@currencies.has_key?(singular_currency)
self * @@currencies[singular_currency]
else
super
end
end
end
puts 3.yen
# Output is
# 0.039
我的问题是为什么不,如果我们更换@@货币与即时可变@currencies并添加attr_reader此代码的工作:货币取代静态变量在鳕鱼
像这样的事情
class Numeric
@currencies = {'yen' => 0.013, 'euro' => 1.292, 'rupee' => 0.019}
attr_accessor :currencies
def method_missing(method_id, *args, &block)
singular_currency = method_id.to_s.gsub(/s$/, '')
if @currencies.has_key?(singular_currency)
self * @currencies[singular_currency]
else
super
end
end
end
puts 3.yen
# Output
# method_missing': undefined method `has_key?' for nil:NilClass (NoMethodError)
# from Untitled.rb:15:in `<main>'
不是3已经是类的数字,因此,设置货币应该能够工作并返回正确的哈希组合?
编辑:so method_missing是一个静态方法呢?为什么不用self.method_missing定义?
'method_missing'是一个实例方法,而不是一个静态方法。 – August 2014-11-14 22:22:29