class Omega
def a
self
end
def b
self
end
def c
self
end
def to_s
"Omega"
end
end
def da?
begin
yield() if block_given?
rescue => exc
nil
end
end
xyz = nil
a = da? { xyz.a.b.c }
xyz = Omega.new
b = da? { xyz.a.b.c }
puts "da? com nil -> '#{a}'"
puts "da? com Omega -> '#{b}'"
Executando:
da? com nil -> ''
da? com Omega -> 'Omega'
O que eu fiz? como a expressão xyz.a.b.c poderia retornar algum erro pois um dos métodos poderia returnar nil, bastaria executar em um bloco de código com a ajuda do método da? (péssimo nome, uma corruptela de “da para executar sem erro? se não, me retorna nil e era wilson…), que captura qualquer erro e some com ele.
Ruby é divertido. :)
ps: teste com
a = da? { xyz.a.b.c } || "nao deu..."