我的模块CurrencyExchange
包含以下方法
CURRENCIES = %w(uah rub eur usd)
def available_currencies
CURRENCIES.join(' ').downcase.split.permutation(2)
end
当我想将available_currencies
与
define_method
available_currencies.each do |(c1, c2)|
define_method(:"#{c1}_to_#{c2}") do |cr| ... end end
我有错误
undefined local variable or method `available_currencies'
for CurrencyExchange:Module (NameError)
但是当我像
一样使用它时 CURRENCIES.join(' ').downcase.split.permutation(2).each do |(c1, c2)|
define_method(:"#{c1}_to_#{c2}") .... end end
一切正常
为什么会这样?
答案 0 :(得分:1)
我认为你需要写def self.available_currencies
答案 1 :(得分:0)
您尝试在类中创建其他方法,并在循环中搜索类方法.available_currencies
。
您必须将类方法.available_currencies
更改为实例方法#available_currencies
或在初始值设定项中创建方法。
方法1:
class MyClass
def self.available_currencies
# Your logic...
end
# Your logic...
end
方法2:
class MyClass
def init
available_currencies.each do |c|
define_method(c) do
# Whatever you want to do ...
end
end
end
def available_currencies
# Your logic...
end
end
我建议您使用第一种方式,因为您可能希望在课程中使用这些货币。如果您想要不同实例的不同货币,我建议您采用第二种方式。
快乐编码:)