A partir de la versión 2.10, Scala introdujo clases implícitas para manejar precisamente este problema.
Esto realizará una conversión implícita de un tipo dado a una clase envuelta, que puede contener sus propios métodos y valores.
En su caso específico, usaría algo como esto:
implicit class RichInt(x: Int) {
def isAFactorOf(y: Int) = x % y == 0
}
2.isAFactorOf(10)
// or, without dot-syntax
2 isAFactorOf 10
Tenga en cuenta que cuando se compila, esto terminará encajonando nuestro valor bruto en a RichInt(2). Puede evitar esto declarando su RichInt como una subclase de AnyVal:
implicit class RichInt(val x: Int) extends AnyVal { ... }
Esto no causará el boxeo, pero es más restrictivo que una clase implícita típica. Se puede solamente contener métodos, no valores o estado.