2010-10-04 50 views
1

在Ruby中,在某些場合(紅寶石/古藪/ texplay)心中已經看到如下所示的代碼使用的對象:紅寶石獲取陣列從一個塊返回

image.paint { 
    circle 20, 20 
    pixel 10, 10 
} 

難道可以讓我寫能像使用一個類似的功能,從而?:

my_function { 
    "one" 
    "two" 
    "three" 
} 

,將返回和數組: [ 「一」, 「二」, 「三」]

PS這個函數不僅僅用於生成數組,我不想知道如何去做,所有我需要知道的是語法。在此先感謝,埃爾。

回答

3

TexPlay看起來不錯,你怎麼找到它? :)

我想不出辦法做你想做的事,對不起。但是,如果你每前綴字符串_很容易:

function { 
    _"one" 
    _"two" 
    _"three" 
} 

#=> ["one", "two", "three"] 

其中:

def function(&block) 
    Object.new.tap do |s| 
     s.instance_eval do    
      def _(var) 
       @val ||= [] 
       @val << var 
      end 
     end 
     s.instance_eval(&block) 
    end.instance_variable_get(:@val) 
end  
+1

我發現它在古藪論壇:)我用古藪,因爲它爲Ruby最簡單的2D庫我能找到!感謝這個例子,它的輝煌,告訴我我需要知道什麼。再次感謝 – Ell 2010-10-05 07:05:23