2016-07-23 20 views
0

您可以使用const_set方法將類定義爲Object上的常量。是否有任何有趣的或有啓發性的用例可以將某些參數傳遞給Class.new塊?對Class.new塊的參數

Object.const_set(:Klass, Class.new do |can_i_use_this| 
    def ping 
    "pong" 
    end 
end) 

Klass.new.ping 

你能用這個做什麼嗎?

回答

2

事實證明,塊參數是您正在創建的類。在IRB

Class.new do |what| 
    p what 
end 

運行這段代碼,你會看到類似

#<Class:0x000000022b2698> 
=> #<Class:0x000000022b2698> 

輸出的第一行是p what給出,而第二行顯示的Class.new的返回值,這是我們所知道的是班上。你可以看到whatClass.new的返回值是同一個對象。

結論:block參數不是很有用,因爲您可以在該類中使用self獲得類實例。我能想象到的唯一用法是使用名爲的平面範圍來創建方法。

Foo = Class.new do |klass| 
    define_method :class_name do 
    klass.name 
    end 
end 

Foo.new.class_name #=> "Foo" 

然而,這不是非常有用或者是因爲一個對象可以很容易地訪問self.class同級車。

+1

今天學到了新東西!我從來不知道['Class :: new'產生了該塊的類](http://ruby-doc.org/core/Class.html#method-c-new)! –