未定义的局部变量或模块的方法

时间:2016-08-05 13:14:28

标签: ruby-on-rails ruby ruby-on-rails-3

我的模块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 

一切正常

为什么会这样?

2 个答案:

答案 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

我建议您使用第一种方式,因为您可能希望在课程中使用这些货币。如果您想要不同实例的不同货币,我建议您采用第二种方式。

快乐编码:)