2010-02-24 701 views
5

supongo que me acostumbré a decir cosas como:¿Tiene Ruby/Rails un equivalente a ++?

x++ 

en PHP y Java tierra. Pero cuando he intentado esto en mi código rieles que tenía un ajuste:

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 alrededor de un pedacito para los operadores de Ruby/Rails para una referencia a ++, pero no pudo encontrar nada. Para un lenguaje que se enfoca en escribir menos, me parece un poco extraño que no haya un equivalente en ++. ¿Me estoy perdiendo de algo?

+2

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

Respuesta

10

Prueba esto:

x += 1 
+0

x ++ (y ++ x) están en línea y se ejecutan en diferentes órdenes a partir de esto. Como ejemplo, no es posible duplicar esta línea (léase: sin dividirla) al usar x + = 1: 'row_top = row_height * row_index ++;' –

3

realmente se debe estar preguntando por qué necesita de incremento/decremento. He estado usando Ruby durante casi dos años, y no había notado que faltaban operadores de incremento y disminución. Puede ser porque la forma Ruby de hacer operaciones donde los operadores de incremento y decremento se usan comúnmente es con un iterador.

Como each_with_index que ejecuta un bloque determinado para cada elemento/par de índice en la matriz.

Por ejemplo, este código se repetirá a través de una matriz de salida de la representación de cadena para cada elemento y la paridad de su índice.

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

Editar: Se ha eliminado la extensión Fixnum que proporciona el incremento de postfix porque no funciona. Tras una inspección más cercana, no hay nada que le impida agregarlo, pero implicaría escribir su característica en C y volver a compilar.

+0

Pero ¿qué pasa con '++ x'? (No es que deba * siempre * ser usado de esa manera. Tengo que pausar cada vez que vea algo como 'while (- x)' y piense en lo que está haciendo en realidad (¿x será alguna vez 0 en el cuerpo?) – Ponkadoodle

+0

Esto no funcionará en absoluto. Primero, no puede simplemente definir operadores arbitrarios, y "++" ni siquiera analizará en Ruby, debería llamarse como 'x.send ('++')'. Segundo, no puedes escribir 'self =' nada. Recuerda, hacer 'x = algo 'simplemente hace que el nombre' x' se refiera a un objeto nuevo - no cambia el valor del objeto que estaba allí antes. – Chuck

+0

Gracias Chuck, eso me enseñará a publicar el código sin probarlo. Estoy seguro de que hay una forma de escribir un ++, pero, luego de una inspección más cercana, probablemente implicaría recompilar a Ruby de C. – EmFi

Cuestiones relacionadas