2010-02-24 15 views
5

Credo proprio sono abituato a dire le cose come:Ruby/Rails hanno un equivalente ++?

x++ 

in PHP e Java territorio. Ma quando ho provato questo nel mio codice Rails aveva un fit:

compile error 
/users/gshankar/projects/naplan/app/views/answers/new.html.haml:19: syntax error, unexpected ';' 
/users/gshankar/projects/naplan/app/views/answers/new.html.haml:23: syntax error, unexpected kENSURE, expecting kEND 
...}\n", 0, false);_erbout;ensure;@haml_buffer = @haml_buffer.u... 
          ^
/users/gshankar/projects/naplan/app/views/answers/new.html.haml:26: syntax error, unexpected $end, expecting kEND 

Googled intorno un po 'per gli operatori di Ruby/Rails per un riferimento a ++, ma non ho trovato nulla. Per un linguaggio che si concentra sulla scrittura di meno, trovo un po 'strano che non ci sarebbe un equivalente ++. Mi sto perdendo qualcosa?

+2

x + = 1 # .................. –

risposta

10

Prova questo:

x += 1 
+0

x ++ (e ++ x) sono entrambi in linea e vengono eseguiti in ordini diversi da questo. Ad esempio, non è possibile duplicare questa riga (leggi: senza dividerla) quando si utilizza x + = 1: 'row_top = row_height * row_index ++;' –

3

Davvero si dovrebbe chiedere a te stesso perché hai bisogno di incremento/decremento. Sto usando Ruby da quasi due anni e non avevo notato che mancavano gli operatori di incremento e decremento. Potrebbe essere perché il modo Ruby di fare operazioni in cui gli operatori di incremento e decremento vengono comunemente usati è con un iteratore.

Come each_with_index che esegue un blocco determinato per ogni coppia elemento/indice nell'array.

Ad esempio, questo codice verrà iterato attraverso una matrice che emette la rappresentazione di stringa per ciascun elemento e la parità dell'indice.

array = ["first", "second", "third","fourth","last"] 
array.each_with_index do |object,index| 
    puts index % 2 ? "even" : "odd" 
    puts object.to_s 
end 

Modifica: Estensione di Fixnum rimossa che fornisce incremento postfisso perché non funziona. A un esame più attento non c'è nulla che ti impedisca di aggiungerlo, ma ciò implicherebbe la scrittura della tua funzione in C e una ricompilazione.

+0

Ma per quanto riguarda '++ x'? (Non che dovrebbe * mai * essere usato in questo modo. vedere qualcosa come 'while (- x)' e pensare a cosa sta effettivamente facendo (x sarà mai 0 nel corpo?)) – Ponkadoodle

+0

Questo non funzionerà affatto, in primo luogo, non si può semplicemente definire operatori arbitrari, e "++" non verrà nemmeno analizzato in Ruby - dovrebbe essere chiamato come 'x.send ('++')." In secondo luogo, non puoi scrivere 'self =' nulla. Ricorda, facendo 'x = qualcosa "fa solo il nome" x "si riferisce a un nuovo oggetto - non cambia il valore dell'oggetto che era lì prima. – Chuck

+0

Grazie Chuck, che mi insegnerà a postare il codice senza testarlo. un modo per scrivere un ++, ma, a un esame più attento probabilmente implicherebbe la ricompilazione di Ruby da C. – EmFi

Problemi correlati