2013-01-19 63 views
0

我有一個類:有沒有辦法在Ruby中創建臨時名稱空間和常量?

class MyClass 
    def self.say_hello 
    puts "hello" 
    end 
end 

,我想創建一個進程來覆蓋類和它的方法暫時:

begin "a temporary namespace, constants, variables and methods within this code" 
    Thread.current[:neverland] = -> do 
    Object.instance_exec do 
     class MyClass 
     def self.say_hi 
      puts "hi" 
     end 
     end 

     MyClass.say_hi 
     MyClass.say_hello 
    end 
    end 
end 

> Thread.current[:neverland].call 
=> "hi" 
=> "hello" 

> MyClass.methods - Object.methods 
=> ["say_hello"] 

> MyClass.say_hi 
=> undefined method `say_hi' for MyClass:Class (NoMethodError) 

有沒有這樣的事情在Ruby中還是我在做夢?命名空間無污染,臨時常量,方法,命名空間,類。乾淨,專注和優化的代碼,沒有太多分心。

回答

1

您可能正在考慮計劃在Ruby 2.0中發佈的類似Refinements的內容。

在此之前,你將不得不有創意。

+0

此鏈接** **優化**的介紹使得這個答案成爲低估的寶石!謝謝 –

相關問題