В 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 решительно выступает за последовательное применение меньшего набора правил, а не многих правил со многими исключениями. Это изначально кажется исключением для меня.