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