Я думаю, что это проще объяснить на простом примере. (помощь в перефразировании названия приветствуется; -)
Я бы хотел реализовать метод squared
и, используя implicit def
, автоматически добавить его в любой класс, поддерживающий оператор *
.
С Int это очень просто:
class EnhancedInt(x: Int) { def squared = x * x }
implicit def IntToEnchancedInt(x: Int) = new EnhancedInt(x)
Но с Any или AnyVal я получаю следующую ошибку:
scala> class EnhanceAny(x: AnyVal) { def squared = x * x }
<console>:7: error: value * is not a member of AnyVal
class EnhanceAny(x: AnyVal) { def squared = x * x }
Я хотел бы знать, как я могу применить его к любому числовому классу или, что еще лучше, к любому классу, поддерживающему оператор *
.