У Scala, якщо я визначаю метод, що викликається apply
у класі або об'єкті верхнього рівня, цей метод буде викликаний кожного разу, коли я додаю пару дужок до екземпляра цього класу і поміщаю відповідні аргументи для apply()
між ними. Наприклад:
class Foo(x: Int) {
def apply(y: Int) = {
x*x + y*y
}
}
val f = new Foo(3)
f(4) // returns 25
Отже, в основному, object(args)
це просто синтаксичний цукор для object.apply(args)
.
Як Scala робить це перетворення?
Чи відбувається тут глобально визначене неявне перетворення, подібне до неявних перетворень типу в об’єкті Predef (але різне за своїм характером)? Або це якась глибша магія? Я запитую, тому що, схоже, Scala категорично виступає за послідовне застосування меншого набору правил, а не багатьох правил за багатьма винятками. Спочатку це здається мені винятком.