Trong Scala, nếu tôi định nghĩa một phương thức được gọi apply
trong một lớp hoặc một đối tượng cấp cao nhất, phương thức đó sẽ được gọi bất cứ khi nào tôi nối một cặp dấu ngoặc đơn vào một thể hiện của lớp đó và đặt các đối số thích hợp apply()
vào giữa chúng. Ví dụ:
class Foo(x: Int) {
def apply(y: Int) = {
x*x + y*y
}
}
val f = new Foo(3)
f(4) // returns 25
Vì vậy, về cơ bản, object(args)
chỉ là cú pháp đường cho object.apply(args)
.
Scala thực hiện chuyển đổi này như thế nào?
Có chuyển đổi ngầm định được xác định trên toàn cầu đang diễn ra ở đây, tương tự như chuyển đổi kiểu ngầm định trong đối tượng Predef (nhưng khác về loại) không? Hay là một phép thuật sâu xa hơn? Tôi hỏi vì có vẻ như Scala rất ủng hộ việc áp dụng nhất quán một bộ quy tắc nhỏ hơn, thay vì nhiều quy tắc với nhiều ngoại lệ. Điều này ban đầu dường như là một ngoại lệ đối với tôi.