Per espandere la risposta di @eques, a partire dalla versione 2.10, Scala ha introdotto le classi implicite per gestire con precisione questo problema.
Questo eseguirà una conversione implicita su un determinato tipo in una classe spostata, che può contenere i tuoi metodi e valori.
Nel tuo caso specifico, dovresti usare qualcosa del genere:
implicit class RichInt(x: Int) {
def isAFactorOf(y: Int) = x % y == 0
}
2.isAFactorOf(10)
// or, without dot-syntax
2 isAFactorOf 10
Nota che quando compilato, questo finirà per inscatolare il nostro valore grezzo in RichInt(2) . Puoi aggirare questo dichiarando il tuo RichInt come sottoclasse di AnyVal :
implicit class RichInt(val x: Int) extends AnyVal { ... }
Questo non causa il pugilato, ma è più restrittivo di una tipica classe implicita. Può solo contenere metodi, non valori o stato.