2016-03-01 11 views
5

Stavo provando a fare una semplice fodera mentre loop in rubino usando le parentesi graffe. Ero sucessful nei seguenti formati:Come fare un one-liner mentre si fa il ciclo in Ruby usando le parentesi graffe

while x < 5 do x+=1 end 

Questo è sufficiente come uno di linea, ma im non una ventola di usare fare estremità in una fodere. Mi piacerebbe fare qualcosa di simile a questo:

while x < 5 { x += 1 } 

Questo può essere fatto?

+1

Sto assumendo che questo è troppo semplificato per i mezzi di questa domanda, ma non credo keyw ords come 'while',' for', ecc. accettano la sintassi del blocco. Detto questo, usando i metodi 'Enumerable', si ottiene qualcosa come' (x ... 5) .each {x + = 1} 'offrirà lo stesso risultato. – engineersmnky

risposta

11

Che dire di questo:

x = 0 
x += 1 while x < 5 
x 
#=> 5 
+1

Che legge molto bene. 'x + = 1 until x == 5' è un'altra opzione. Preferisco "while", ma "fino a" merita di essere menzionato. –

1

Invece di questo:

x = 0 
while x < 5 do 
    puts x 
    x += 1 
end 

si potrebbe scrivere questo:

5.times { |i| puts i } 
4

Se la domanda è "Come usare while con i capelli ricci parentesi graffe? Può essere fatto? ", quindi la risposta è: No, non è possibile.

Invece, è possibile utilizzare mentre senza fare ... end, e senza parentesi graffe:

x = 0 
(x+=1; p x) while x<5 

O si potrebbe usare parentesi graffe, senza mentre, per ottenere lo stesso :

x=0 
(x+1..5).each{|y| p y} 
+0

Tuttavia, questi due sono diversi, poiché gestiscono regole di scoping diverse. Le variabili create all'interno di un ciclo while saranno visibili agli ambiti esterni. Lo stesso non vale per, diciamo "blocchi" ciascuno. – yeyo

Problemi correlati