복붙노트

[SCALA] 어떻게 스칼라의 () 메소드 마법의 작업을 적용됩니까?

SCALA

어떻게 스칼라의 () 메소드 마법의 작업을 적용됩니까?

스칼라에서 나는라는 메소드를 정의하는 경우, 클래스 또는 내가 그 클래스의 인스턴스에 한 쌍에게 괄호를 추가 할 때마다,이 메소드가 호출 될 최상위 객체에 적용하고, 그 사이에 () 적용에 대한 적절한 인수를 넣어 그들. 예를 들면 :

class Foo(x: Int) {
    def apply(y: Int) = {
        x*x + y*y
    }
}

val f = new Foo(3)
f(4)   // returns 25

그러니까 기본적으로, 객체 (인수)는 object.apply (인수) 단지 문법 설탕입니다.

어떻게 스칼라는이 변환을합니까?

진행 세계적으로 정의 된 암시 적 변환은 PREDEF 객체의 암시 적 형식 변환과 비슷한 (하지만 종류의 서로 다른), 있나요? 아니면 좀 더 깊은 마법? 스칼라 강하게 규칙의 작은 세트의 일관된 적용을 선호하는 것 같다 때문에 오히려 많은 예외 많은 규칙보다 부탁드립니다. 이것은 처음에 나에게 예외처럼 보인다.

해결법

  1. ==============================

    1.나는 원래 말한 것보다 계속 더 깊은 거기에 아무것도 생각하지 않는다 : 그냥 문법 설탕의 컴파일러는 F 변환된다 (A) f.apply에 (a)는 특수 구문의 경우와.

    나는 원래 말한 것보다 계속 더 깊은 거기에 아무것도 생각하지 않는다 : 그냥 문법 설탕의 컴파일러는 F 변환된다 (A) f.apply에 (a)는 특수 구문의 경우와.

    이것은 특정 규칙처럼 보일 수도 있지만, (갱신, 예를 들면) 이들 중 몇은 DSL과 같은 구조 및 라이브러리 수 있습니다.

  2. ==============================

    2.실제로 일반적인 경우 주변의 다른 방법, 정보 적용 방법 개체 또는 클래스이고, 함수는 암시 적 적용에있어서와 같은 이름을 가진 객체를 생성하는 방법이다. 실제로 사용자가 정의하는 모든 기능은 Functionn의 특성의 하위 객체 인 (N 인수의 수입니다).

    실제로 일반적인 경우 주변의 다른 방법, 정보 적용 방법 개체 또는 클래스이고, 함수는 암시 적 적용에있어서와 같은 이름을 가진 객체를 생성하는 방법이다. 실제로 사용자가 정의하는 모든 기능은 Functionn의 특성의 하위 객체 인 (N 인수의 수입니다).

    6.6 절을 참조하십시오 : 스칼라 언어 사양의 기능 응용 프로그램 항목의 자세한 내용은.

  3. ==============================

    3.예. 그리고이 규칙이 작은 세트에 속한다.

    예. 그리고이 규칙이 작은 세트에 속한다.

  4. from https://stackoverflow.com/questions/1223834/how-does-scalas-apply-method-magic-work by cc-by-sa and MIT license