2010-09-14 8 views
5

Perché non posso usare parentesi graffe nei costrutti if/else? Ho lasciato Python perché non mi sentivo a mio agio con il rientro attento delle affermazioni.Posso usare parentesi graffe in Ruby se/else?

È lo stesso anche in Ruby?

Ad esempio, posso scrivere qualcosa di simile?

if token == "hello" { 
    puts "hello encountered" 
    # lots of lines here 
} 

C'è un modo per utilizzare le parentesi graffe per farlo? Ho letto anche dei blocchi ma non sono sicuro di come possano essere utilizzati nelle espressioni if/else.

+1

se si stanno avendo un momento difficile con la formattazione si potrebbe desiderare di provare a utilizzare un IDE in grado di formattazione automatica per voi solo così si puoi vedere come dovrebbero essere le cose all'inizio – dave

+1

@dave bisogno di dargli un'altra occhiata .. con l'accettazione in mente :) – Jeet

+8

Penso che stai facendo un errore qui. Non puoi piegare la sintassi di una lingua alle tue aspettative (almeno non in Ruby). Piuttosto, dovrai piegare le tue aspettative alla sintassi di una lingua. Fa parte dell'apprendimento di una nuova lingua. E se non ti senti a tuo agio nel rientro del codice, usa un IDE o un editor migliore. È qualcosa che devi fare comunque, quindi non dovrebbe essere un problema. – AboutRuby

risposta

4

No. È necessario utilizzare end anziché }.

14

Non è possibile utilizzare le parentesi graffe, ma il rientro non è importante. Invece di una parentesi graffa, Ruby usa la parola chiave end.

if token == "hello" 
    puts "hello encountered" 
    # lots of lines here 
end 

mi piacerebbe ancora vivamente rientro con attenzione, anche se - mal codice rientrato sarà ingannare i lettori umani, anche se le parentesi graffe vengono utilizzati in modo corretto.

+0

ma diventa complicato per i grandi costrutti .. – Jeet

+0

+1 per sottolineare l'importanza della corretta indentazione sulle parentesi graffe. Raedability è il re. –

+0

@iAdam: Mi dispiace, cosa diventa complicato per i grandi costrutti? – Chuck

12

Questo è carino:

def my_if(condition, &block) 
    block.call if condition 
end 

Usa come segue:

my_if(token == "hello") { 
    puts "hello encountered!" 
} 
+0

Per ancora più divertimento, definisci 'if' su' TrueClass' e 'FalseClass' come fa Smalltalk. – akuhn

Problemi correlati