Domanda

Ho trovato tre modi per scrivere la stessa condizione in Ruby:

#1
if 1==1 
  puts "true" 
end

#2
puts "true" if 1==1

#3
if 1==1  then puts "true" end

Perché non posso farlo?

#4
if 1==1 puts "true"

Non capisco:

  1. Perché quindi e fine sono necessari in # 3 e,
  2. Perché devo cambiare l'ordine per far funzionare # 2.

L'istruzione n. 4 sembra il modo più naturale per scrivere questo. Non capisco perché non sia possibile.

È stato utile?

Soluzione

Il " se x allora y end " la sintassi è pensata per i condizionali multilinea mentre " y if x " form è pensato per istruzioni condizionali a riga singola concise. then è necessario nel primo caso per dire a Ruby che la condizione è finita (dal momento che Ruby non richiede parentesi come C), e end è necessario per dire a Ruby che l'intero blocco if è terminato (poiché può essere composto da più righe).

Puoi sostituire quindi con un punto e virgola, perché un fine riga indica anche la fine della condizione. Non puoi sbarazzarti del end con un multilinea se . Utilizzare il secondo modulo o l'operatore ternario se si desidera un one-liner conciso.

Ad esempio, supponiamo

x = true

quanto segue valuterà true e restituirà y

x ? y :
=> y

allo stesso modo, questo valuterà falso e non restituirà nulla

!x ? y :
=> 

aggiungi un termine dopo ':' per il caso else

!x ? y : z
=> z

Altri suggerimenti

Il fatto è che entrambi i modi sono in realtà un modo naturale di pensare:

se questo è vero, fai qualcosa

fai qualcosa se questo è vero

Vedi? Ruby cerca di avvicinarsi alla sintassi inglese in questo modo. end è necessario solo per terminare il blocco, mentre nella seconda versione il blocco è già chiuso con if .

Per rispondere effettivamente alla tua domanda, penso che non ci sia alcuna possibilità di rimuovere quindi e fine . Ricorda Pascal / Delphi? Hai anche un quindi . È tipico solo per i linguaggi in stile C non averlo.

Che ne dici di usare i due punti invece di così? http://www.java2s.com/Code/Ruby/Statement/layoutanifstatementisbyonplacingth. htm

Esistono vari modi in cui è possibile cortocircuitare se si desidera farlo.

L'istruzione condizionale è solo una parte della sintassi di Ruby per renderla più inglese.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top