モジュール内でクラス メソッドを動的に定義するのに問題があります。以下のコードを参照してください。NameError: undefined local variable or method
モジュール内の別のクラス メソッドを参照しようとすると、エラーが発生します。これはスコープまたはコンテキストの問題のようですが、これまでのところ把握できていません。
module Bar
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def fruits
["apple", "orange", "banana"]
end
def example_function(string)
string.upcase
end
fruits.each do |fruit|
method_name = fruit.to_sym
define_method(method_name) { example_function(fruit) }
end
end
end
class Foo
include Bar
end
puts Foo.apple
puts Foo.orange
puts Foo.banana
私は呼び出すことができるようにしたい:
puts Foo.apple => "APPLE"
puts Foo.orange => "ORANGE"
puts Foo.banana => "BANANA"
現在、これらのいずれかを試すと、次のエラーが発生します。
NameError: undefined local variable or method 'fruits' for Bar::ClassMethods:Module
さらに、Bar::ClassMethods のクラス メソッドを Foo で使用できるようにする必要があるため、次のように呼び出すことができるはずです。
puts Foo.fruits => ["apple", "orange", "banana"]
要件:
- すべてのコードは単一のモジュール内にあります。
- このモジュールでは、インスタンス メソッドとクラス メソッドの両方を混在させることができます (以下の記事)。
- ターゲット メソッドは動的に定義されます。
「Include vs Extend in Ruby」を読んでください (特に「A Common Idiom」というタイトルのセクション) http://www.railstips.org/blog/archives/2009/05/15/include-vs-extend-in-ruby/
これに関するヘルプは大歓迎です!