Ruby · Avançado · Inglês · Técnico
coerce
Método que um objeto numérico implementa para ensinar ao Ruby como operar quando um Integer ou Float está à esquerda, como em 5 * obj. Devolve um par compatível.
Onde usar
Aparece em classes de valor como Dinheiro ou Vetor que querem operar com números nos dois lados. Sem coerce, 2 * obj lança TypeError.
Em código
M = Struct.new(:v) do
def *(n) = M.new(v * n)
def coerce(n) = [self, n]
end
r = 3 * M.new(2)
p r.v # => 6Exemplos
Implement coerce so that 2 times money works.
Implemente coerce para que 2 vezes dinheiro funcione.
Without coerce, the integer can't handle my class.
Sem coerce, o inteiro não sabe lidar com a minha classe.
Cuidado
Não é conversão de tipo geral como to_s ou to_i: só entra em ação quando o argumento de um operador numérico não é conhecido.