0

こんにちは私はdefine_methodを使用していくつかのメソッドを定義するためにミックスインを使用しようとしています。私は次のようなことをしたいです

module A
  %w(a b c d).each do |w|
     define_method(w) { "method #{w}" }
  end
end

だから私はそれからすることができます

class B
  include A
end

B.new.c # => 'method c'

しかし、それはうまくいきません。

私は(ほとんど)included、instance_evalclass_evalなどを含むすべてを試しました...

できますか?

アップデート

私が投稿した例では、最初は構文エラーがありましたが、それは本当の問題ではありませんでした。私は投稿の例を作成しましたが、それは実際の例ではありませんでした(投稿するには少し長すぎます)。

私の問題は、リスト%w(a, b, c, b)で代わりにコンマを使用したことでした%w(a b c b)

したがって、a,の代わりにが定義されましたa。愚かな私、(しかし見つけるのは難しい)。

それがあなたたちのために働くのを見て、私が問題を解決するのを助けました、ありがとう

4

1 に答える 1

4

モジュールは次のようにすべきではありません:

module A
  %w(a b c d).each do |w|
     define_method(w) { "method #{w}" }
  end
end

つまり、endがありませんでした。

于 2012-04-24T17:04:08.813 に答える