2017-02-10 61 views
0

我試圖端口這種模式參數化在Python類紅寶石參數化類:https://github.com/prometheus/client_python/blob/6a8d85e5f64935b6c2a409291e9f6578a7bfe1b0/prometheus_client/core.py#L395-L434如何在Ruby中

外方法設置一些變量,然後在內部定義了關閉了這些值的一類。結果是從這個返回的類創建的所有對象都共享一些共同的狀態。

我不能這樣做在Ruby中因爲Ruby不允許類定義的方法:

def foo 
    class Bar 
    end 
end 

這產生了錯誤:class definition in method body

在Ruby中這樣做的正確方法是什麼?

+0

「Ruby不允許在方法中使用類定義」 - 爲什麼?完全允許。 – mudasobwa

+1

試圖在方法中定義一個類給了我下面的錯誤:「方法體中的類定義」。 – Julius

+2

對不起,你有沒有讀過這個網站的規則?請發佈您嘗試運行的代碼,發佈您收到的錯誤消息,並且我將能夠顯示出現問題。 – mudasobwa

回答

3

如果你想在Ruby中動態創建一個類,你可以。你不能在一個方法中定義一個常量,至少不能用通常的方式。有關更多信息,請參見thoseanswers

def create_class(methods = {}) 
    klass = Class.new 
    methods.each do |method_name, value| 
    klass.send(:define_method, method_name) do 
     value 
    end 
    end 
    klass 
end 

my_class = create_class a: 'Hello', b: 'World' 
my_instance = my_class.new 
puts my_instance.a 
#=> "Hello" 
puts my_instance.b 
#=> "World" 
+0

謝謝!我希望在Ruby中可能會有更少的kludy模式來實現,但這應該可行! – Julius