Vamos imaginar um método onde podemos passar variáveis do Any
tipo.
def myMethod(input: Any*) = {
input.foreach(println)
}
myMethod("q", "w", "e", 1, 2, 3, true, false, ...)
O Scala permite restringir tipos , por exemplo: apenas String
e Integer
?
O Scala 3 oferece suporte a tipos de união , que nos permitem codificar essa restrição diretamente.
No Scala 2, você ainda pode fazer isso com implícitos, se ficar um pouco esperto. Isso é chamado de padrão magnético . A ideia é que escreveremos uma implementação concreta de nosso método, que usa instâncias de uma característica que controlamos, chamada de magnet, e então escreveremos um monte de implícitos para pegar os tipos com os quais realmente nos importamos e convertê- los em nossa característica magnética.
Em seguida, escreva
myMethod
para obterMyMethodMagnet
instâncias e o Scala converterá automaticamente os valores válidos para o tipo apropriado.Você ainda chama da mesma forma, e o Scala envolve implicitamente tudo em nossas classes magnet.