Починаючи з версії 2.10, Scala представила неявні класи для вирішення саме цієї проблеми.
Це дозволить виконати неявну конверсію заданого типу в обгорнутий клас, який може містити власні методи та значення.
У вашому конкретному випадку ви використовуєте щось подібне:
implicit class RichInt(x: Int) {
def isAFactorOf(y: Int) = x % y == 0
}
2.isAFactorOf(10)
// or, without dot-syntax
2 isAFactorOf 10
Зауважте, що при компіляції це в остаточному підсумку перетворить на наше неочищене значення в a RichInt(2)
. Ви можете обійти це, оголосивши ваш RichInt як підклас AnyVal
:
implicit class RichInt(val x: Int) extends AnyVal { ... }
Це не спричинить бокс, але він є більш обмежувальним, ніж типовий неявний клас. Він може містити лише методи, а не значення або стан.