A maneira idiomática de fornecer métodos de extensão em Scala é por meio do padrão ” Pimp my library ” usando conversões implícitas. Ou seja, se eu quiser adicionar um método plus
à classe Int, tudo o que tenho que fazer é definir um novo tipo ExtendedInt
com esse método e fornecer uma conversão implícita de forma que, sempre que o compilador vir um Int, mas precisar de um ExtendedInt, ele o converterá automaticamente :
class ExtendedInt(value: Int) {
def plus(other:Int) = value + other
}
implicit def extendInt(i: Int) = new ExtendedInt(i)
Agora podemos usar 1.plus(2)
em nosso código
Descobri neste thread de estouro de pilha uma maneira mais fácil de fazer isso no scala 2.10.
implicit class ExtendedInt(val value: Int) extends AnyVal {
def plus(other:Int) = value + other
}
E agora podemos usar 2.plus(2)
em nosso código
O tópico também aponta para estes recursos para uma maior compreensão do assunto: