Distinguir argumento nulo de nenhum argumento em rubi.

Digamos que você queira criar um método que aceite um argumento que pode ser nulo ou nenhum argumento. E você precisa do seu método para distinguir argumento nulo de nenhum argumento. Algo assim:

inspector = Inspector.new
inspector
.inspect # => You've passed nothing
inspector
.inspect nil # => You've passed nil
inspector
.inspect :foo # => You've passed something

Então, aqui estão duas maneiras simples de fazer isso:

class Inspector
# Using a vanilla object for default value.
# This object is not equal to anything except for
# itself, making it a perfect choice for a default
# value placeholder like here:
BLANK_VALUE
= Object.new

def inspect(value = BLANK_VALUE)
if BLANK_VALUE == value
puts
"You've passed nothing"
elsif value.nil?
puts
"You've passed nil"
else
puts
"You've passed something"
end
end

# Another approach is to accept an array of arguments
# and to check it's length
def inspect(*args)
if args.empty?
puts
"You've passed nothing"
elsif args.first.nil?
puts
"You've passed nil"
else
puts
"You've passed something"
end
end
end