2012-10-07 4 views
17

Je veux enregistrer un « bloc de code » dans une variable pour être réutilisée, quelque chose comme:Comment stocker des blocs de code Ruby

block = do 
|test| puts test 
end 

3.upto(8) block 

que quelqu'un peut me montrer ce que je fais si manifestement mal tourner? (Ou s'il est tout simplement impossible)

Répondre

24

Il y a plusieurs façons de le faire en Ruby, dont un est d'utiliser un Proc:

foo=Proc.new do |test| 
    puts test 
end 

3.upto(8) { foo.call("hello world") } 

En savoir plus sur Procs:

mise à jour, pourrait être réécrite la méthode ci-dessus comme suit:

# using lower-case **proc** syntax, all on one line 
foo = proc { |test| puts test } 
3.upto(8) { foo.call("hello world") } 

# using lambda, just switch the method name from proc to lambda 
bar = lambda { |test| puts test } 
3.upto(8) { bar.call("hello world") } 

Ils sont essentiellement des méthodes très similaires, avec des différences subtiles. Enfin, il y a probablement des façons plus élégantes de faire ce que j'ai esquissé, faites-vous plaisir d'entendre quelqu'un de mieux. J'espère que cela t'aides.

+2

Merci beaucoup. Pour le lien encore plus. Pouvez-vous être aussi gentil que d'inclure une mention de lambdas aussi bien? Pour un but historique. –

+0

@Shingetsu, j'ai ajouté et mis à jour avec lambda, ainsi que d'une version légèrement simplifiée de l'approche proc trop – stephenmurdoch

+3

@Shingetsu: Lambdas ne sont pas historiques. Vous devriez presque * toujours * les utiliser au lieu de Procs. Ils sont beaucoup plus complets et sont la norme. – Linuxios

Questions connexes