Se você é um fã do tap
método, provavelmente o usou para fazer atribuições compactas como esta:
def sources
@sources ||= [].tap do |s|
s << "source1"
s << "source2"
end
end
ou para fazer uma linha simples de métodos em cadeia operando e retornando o objeto original:
[1,2,3,4,5].tap{ |a| a.delete(2) }.reverse
Além disso, tap
pode ser útil na criação de instruções de controle de fluxo que retornam qualquer coisa que você quiser, em vez de um objeto que você bateu. Isso permite que você crie one-liners que geram novos objetos com base no original:
[1,2,3,4].tap{ |a| break a.count > 1 ? [a.first] : a }
A palavra-chave mágica aqui é break
. Se você passar algum objeto para ele, o resultado de chamar a tap
será esse objeto.