2012-05-29 6 views
6

Una cosa que me encanta de Ruby es que puedes expresar las cosas de la manera más breve posible.Taquigrafía para "devolver x si x" en Ruby

Sé que uno puede hacer, al asignar

x ||= a 
# instead of 
x = a unless x 
# which is 
x = x || a 

¿Hay una forma analógica para return?

# instead of 
return x if x 

estoy tratando de "decir" x sólo una vez. This question pregunta por solo regresar (nada), pero no veo cómo hacerlo cuando devuelvo algo que no sea vacío.

+0

¿Qué hay de malo en reemplazar 'return x if x' con simplemente' x'? – Zabba

+2

@Zabba No es necesariamente la última declaración –

+3

Tal vez mis habilidades matemáticas se hayan deteriorado, ¿pero no es lo que ya tiene una línea? –

Respuesta

4

Estoy a punto de que no existe una forma abreviada de su segundo ejemplo, ni se podría escribirse sin modificar la sintaxis de Rubí ya que no es un idioma bastante común. Lo siento, hermano, pero parece que vas a tener que ser prolijo en este caso. (Aunque, en realidad, en lo que va de verbosidad, éste no es tan malo.)

(Tenga en cuenta, también, que el primer ejemplo, no está del todo bien: x ||= a es equivalente a x = x || a, que también puede ser expresado como x = a unless x.)

+1

Tienes razón, solo lo corrigí. Ya que está "casi seguro", esperaré un poco y admitiré esto como la respuesta 'a menos' que alguien más tenga una. Entonces 'respuesta = tuya; answer || = new_answer', o debería decir 'return new_answer if new_answer; tuyo; ';) –

-1

puede omitir la devolución si es la última instrucción en un código de bloque.

ejemplo

irb(main):002:0> def b(c) 
irb(main):003:1> c if c 
irb(main):004:1> end 
=> nil 
irb(main):005:0> b(4) 
=> 4 
irb(main):006:0> b(nil) 
=> nil 
irb(main):007:0> b(true) 
=> true 
irb(main):008:0> b(false) # TADA!!! 
=> nil 
+0

Puedo omitir 'return' si es mi última declaración, pero mi intención era decir' c' solo una vez. Y en mi caso, ¡también quiero cubrir las últimas declaraciones! –

Cuestiones relacionadas