Métodos de extensão em Scala

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 ExtendedIntcom 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: