2012-04-27 10 views

Respuesta

6

O un poco más corto (si no se puede esperar foo sea false)

def bar(foo) 
    foo.to_i if foo 
end 
4
def bar(foo) 
    foo.to_i unless foo.nil? 
end 

Pero realmente no ganas nada, IMO, excepto que eliminas el ? ?. Es un personaje más corto, potencialmente más legible si conoces a Ruby. No sé, ya que califica como "más conciso" que el ternario.

(digo "potencialmente", ya que se podría considerar el comportamiento no es evidente en el caso nil.)

4
foo and foo.to_i 

operadores booleanos short circuit y devolver el valor de la última expresión evaluada.

  • foo Si es nil, se le devolverá y foo.to_i no se ejecutará.
  • Si foono esnil, foo.to_i se evaluará y se devolverá su resultado.
+3

O incluso 'foo && foo.to_i'. – tiredpixel

3

Si utiliza ActiveSupport de los carriles se puede escribir usando try método

foo.try(:to_i) 
+0

Solo un comentario: el método 'try' es un método Rails, no Ruby. – leandrotk

2

Si le sucede que quieren en realidad la versión destructiva de este idioma, es decir

foo = (foo.nil? ? nil : foo.to_i) 

entonces se puede do

foo &&= foo.to_i 
1

El lenguaje de rubí adecuado para esto sería

foo && foo.to_i 

Sin embargo, ruby 2.3.0 presentó el safe navigation operator, por some reason también conocido como "operador solitario" en la comunidad de rubí. Utilizando eso, puede escribir lo mismo que:

foo&.to_i 

con el mismo efecto.

PD: algunas personas hate it.

Diviértete.

0

Idiomatic way to write Ruby code.

Podemos escribir el código de 4 formas diferentes:

Usando if:

def bar(foo) 
    foo.to_i if foo 
end 

Usando unless:

def bar(foo) 
    foo.to_i unless foo.nil? 
end 

Usando try método si el uso de rieles:

def bar(foo) 
    foo.try(:to_i) 
end 

Usando &. operador (operador de Rubí navegación segura) si se utiliza de Ruby 2.3.x:

def bar(foo) 
    foo&.to_i 
end 

Para más Idiomatic way to write Ruby code, leí un excelente post sobre eso.

Cuestiones relacionadas