quarta-feira, 5 de março de 2008

Melhorando o “try()” do Ruby, a maneira “Groovy” [parte final]

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..."

Nenhum comentário: