Ruby Gotcha com parâmetros padrão

Portanto, você tem um método em Ruby que deseja ter um valor padrão para um parâmetro.

exemplo:

my_method(param='default string')
puts param

end

// calling the method
my_method
()
// => default string

Isso funciona conforme o esperado, os padrões de parâmetros omitidos corretamente. Mas o que acontece quando você passa o valor de outra variável que pode ou não ser nula?

strings = {headline: 'my headline', body: nil}
my_method strings
[:body]

// => nil

O que aconteceu? Achei que tivéssemos definido um padrão para o parâmetro. Bem, o padrão só funciona se o parâmetro for omitido, não se for falsamente como eu assumi em algumas ocasiões.

Isso entra em ação quando você está extraindo valores dinâmicos de objetos para passar como parâmetros, e você não sabe se o parâmetro que está passando é falsey ou não.

Solução?

Defina o parâmetro como nulo e, em seguida, verifique se há falsidade.

exemplo:

my_method(param=nil)
param
||= 'default string'
puts param

end

// calling the method
my_method
()
// => default string
my_method
nil
// => default string

Portanto, esta solução cobre ambas as situações, o parâmetro é omitido, ainda é padronizado para sua string, e também se um valor nil for passado como o parâmetro.