[scala] Scala의 apply () 메서드 매직은 어떻게 작동합니까?

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가 많은 예외를 가진 많은 규칙보다 더 작은 규칙 세트의 일관된 적용을 강력하게 선호하는 것처럼 보이기 때문에 묻습니다. 이것은 처음에는 나에게 예외처럼 보입니다.



답변

나는 아무것도에가는 깊이 생각하지 않는 것보다 원래 말한 : 그냥 문법 설탕의 이에 컴파일러 변환 f(a)f.apply(a)특별한 문법의 경우와.

이것은 특정 규칙처럼 보일 수 있지만 이들 중 일부 (예 🙂 만이 DSL 과 유사한 구조 및 라이브러리를 update허용합니다 .


답변

실제로는 반대로 적용 메서드가있는 개체 또는 클래스가 일반적인 경우이고 함수는 적용 메서드를 사용하여 동일한 이름의 개체를 암시 적으로 구성하는 방법입니다. 실제로 정의하는 모든 함수는 Function n 특성 의 하위 객체입니다 (n은 인수 수).

주제에 대한 자세한 내용은 섹션 6.6 : Scala 언어 사양함수 응용 프로그램 을 참조하십시오 .


답변

나는 Scala가 많은 예외를 가진 많은 규칙보다 더 작은 규칙 세트의 일관된 적용을 강력하게 선호하는 것처럼 보이기 때문에 묻습니다.

예. 그리고이 규칙은이 작은 집합에 속합니다.


답변