2013-03-03 55 views
-1

難以解決這個問題。假設我想寫一個模塊,包括時,它將允許類通過調用帶有符號如何編寫一個ruby模塊來允許類定義中的方法

class Anything 
    include Foo 

    initializers :hello, :goodbye 
end 

module Foo 

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

end 

相同的語法想法attr_accessible的方法來定義方法。試圖在Rails的源找到了,但,以及..

+0

因爲'Foo'是它的定義之前,包括你上面的代碼會產生一個錯誤。而且,你的問題是什麼? – sawa 2013-03-03 21:27:42

+0

是的,它會。意味着不同的文件,以及比實際工作代碼更多的問題 – AJcodez 2013-03-03 22:22:32

回答

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 
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 
相關問題