2015-11-04 34 views
1

我知道一個方法可以如何在Ruby中給定的類動態創建一個方法?

class Klass 
    define_method foo 

創建如何創建一個方法,並通過班級爲PARAM?

def define_method_for klass, method 

紅寶石2.2

編輯:用例:

我寫一個嘲諷庫。所以,我想嘲笑任意的類和方法。

+0

你爲什麼要這麼做? –

+0

'define_method_for'的第二個參數'方法'的期望類型是什麼? '方法','符號'或'字符串'? – Aetherus

+0

@Aetherus - 一個符號。什麼是「方法」? –

回答

3

我認爲這是你在找什麼:

def define_method_for(klass, method, my_proc) 
    klass.send(:define_method, method, my_proc) 
end 

這裏是你將如何使用它:

class Klass 
end 

my_proc = proc { puts 'foo method called!' } 
define_method_for(Klass, :foo, my_proc) 

Klass.new.foo 
#=> foo method called! 

你也可以把它定義是這樣的:

def define_method_for(klass, method, &block) 
    klass.send(:define_method, method, &block) 
end 

並使用它:

class Klass 
end 

define_method_for(Klass, :foo) do 
    puts 'foo method called!' 
end 

Klass.new.foo 
#=> foo method called! 
1

你可以這樣定義它:

dynamic_name = "ClassName" 
    class = Object.const_set(dynamic_name, Class.new) 
    class.send(:define_method, 'method'){puts 'a'} 

包裹成的方法很簡單。

1

要麼是:

klass.class_eval{define_method(:foo){...}} 

或:

klass.instance_eval{define_method(:foo){...}} 
相關問題