Soy nuevo en Ruby y encontré algo que me confundió un poco.¿Por qué los valores de parámetro predeterminados de Ruby no se asignan a argumentos nulos?
Establezco un valor de parámetro predeterminado en una firma de método.
Al llamar al método, pasé un argumento nil
a ese parámetro.
Pero el valor predeterminado no se asignó; permaneció nil
.
# method with a default value of 1000 for parameter 'b'
def format_args(a, b=1000)
"\t #{a.ljust(30,'.')} #{b}"
end
# test hash
dudes = {};
dudes["larry"] = 60
dudes["moe"] = nil
# expecting default parameter value
puts "Without nil check:"
dudes.each do |k,v|
puts format_args(k,v)
end
# forcing default parameter value
puts "With nil check:"
dudes.each do |k,v|
if v
puts format_args(k,v)
else
puts format_args(k)
end
end
Salida:
Without nil check:
larry......................... 60
moe...........................
With nil check:
larry......................... 60
moe........................... 1000
¿Este comportamiento esperado?
¿Qué ruby-foo me falta?
Parece que nil
no es lo mismo "sin valor" que estoy acostumbrado a pensar en null
en otros idiomas.
¿Qué otro lenguaje utilizaría el valor predeterminado si le das 'null' ?! 'null' es un valor adecuado en cualquier idioma que conozco que usa' null', al igual que 'nil' es un valor apropiado en Ruby. –
Al pasar un valor a la función, cualquier valor, incluso 'nil' para _no value_, anula el valor predeterminado. Si desea el valor predeterminado, omita el argumento. –
Sí, tienes toda la razón. No es que otros idiomas lo traten de manera diferente; es que mis modelos mentales están estropeados y me está llevando un poco recuperar mi cabeza en el código ... –