class Omega def a self end def b self end def c self end def to_s "Omega" endend
def da? begin yield() if block_given? rescue => exc nil endend
xyz = nila = da? { xyz.a.b.c }
xyz = Omega.newb = 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..."