2010-10-04 28 views
1

Dans Ruby, à certaines occasions (ruby/gosu/texplay) I'v le code vu comme ce qui suit utilisé:Ruby Obtenir tableau à partir d'objets retournés dans un bloc

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

Serait-il possible pour moi d'écrire une fonction similaire qui peut être utilisé comme tant ?:

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

qui renverrait et tableau: [ "un", "deux", "trois"]

ps cette fonction n'est pas seulement pour générer des tableaux et je ne m'interroge pas sur les méthodes pour le faire, tout ce dont j'ai besoin de savoir est la syntaxe. Merci d'avance, ell.

Répondre

3

TexPlay est joli, comment trouvez-vous? :)

Je ne peux pas penser à une façon de faire ce que vous voulez, désolé. Mais si vous le préfixe chaque chaîne avec _ il est facile:

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

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

Où:

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

Je l'ai trouvé dans les forums Gosu :) J'utilise Gosu parce que son la plus simple bibliothèque 2d pour Ruby je pouvais trouver ! Merci pour cet exemple, c'est génial et me dit ce que j'ai besoin de savoir. Merci encore – Ell