2014-07-24 49 views
1

我想用紅寶石Metaprograming和傳遞參數

define_method 

另一個函數中定義的紅寶石的方法。示例代碼如下。

def demo(method_name) 
    variable = 5 
    define_method "#{method_name}" do 
     #stuff 
    end 
end 

裏面的新定義的方法,我希望能夠訪問該變量:以前定義

variable=5 

。例如,我希望能夠做到:

define_method "#{method_name}" do 
     return variable*variable 
    end 

並得到變量平方。

我希望能夠到:

demo("squared") 
x = squared # => 25 

有沒有一種方法,我可以通過變量「變量」到define_method即使它是不是在同一個範圍?

+2

你差不多完成了。什麼是*阻止*你? –

+0

嗯,我不確定,但是'do #stuff end'與'variable = 5'的範圍相同。即使我錯了,該塊可以訪問母親的範圍*。檢查這個:'a = 42; l = - > do; b = 22; l2 = - > do; 放一個; 結束; 結束; l.call.call;'*我不確定正確的標題,所以我彌補了這一點。 –

+0

我很困惑。您顯示的代碼完全符合您的要求。那麼,你的問題是什麼? –

回答

4

當然,你有什麼工作。有什麼問題?

[15] pry(main)> def demo(method_name)  
[15] pry(main)* variable = 5  
[15] pry(main)* define_method "#{method_name}" do  
[15] pry(main)*  variable * variable   
[15] pry(main)* end   
[15] pry(main)* end  
=> :demo 
[16] pry(main)> demo('squared') 
=> :squared 
[17] pry(main)> squared 
=> 25