-1

これを理解するのに苦労しています。モジュールを書きたいとします。モジュールを含めると、シンボルを使用してメソッドを呼び出すことにより、クラスがメソッドを定義できるようになります。

class Anything
  include Foo

  initializers :hello, :goodbye
end

module Foo

  # What goes in here? Its not 
  # def self.initializers(*symbols)

end

と同じ構文の考え方attr_accessible。Railsのソースで探してみましたが、まあ..

4

2 に答える 2

2
module Foo

  def self.included(base)
    base.extend ClassMethods
  end

  module ClassMethods
    def initializers *names
      names.each do |name|
        define_method name do
          'ok'
        end
      end
    end
  end

  def self.included(base)
    base.extend ClassMethods
  end
end

class Anything
  include Foo

  initializers :hello, :goodbye
end

puts Anything.new.hello #=> ok
于 2013-03-03T21:43:22.587 に答える
1

例えば:

module Foo

  def self.included(base) 
    block = Proc.new  do |*symbols|
      puts symbols.inspect
    end
    base.class.send(:define_method, :initializers, block)  
  end

end

class Anything
  include Foo

  initializers :one, :two , :three

end
于 2013-03-03T21:47:54.987 に答える