복붙노트

[SCALA] 스칼라에서 프록시 / 대표

SCALA

스칼라에서 프록시 / 대표

내가 (여기에서, 예를 들어, 여기, 그리고 여기)는 최근 몇 스칼라 질문을 본 적이 프록시의 사용을 요구하는 것이, 그리고 내 자신의 일에 한 번 이상 올입니다. (내가 정확히 계산하면, 14) 스칼라 라이브러리는 프록시 특성을 가지고 있습니다.

프록시 클래스 / 특성은 일반적으로 보일러를 많이 포함 :

class FooProxy(val self: Foo) extends Foo {
   // added behavior
   def mymethod = ...

   // forwarding methods
   def method1 = self.method1
   def method2(arg: String) = self.method2(arg)
   ...
}

trait Foo {
   def method1: Unit
   def method2(arg: String): Unit
}

다음과 같이 내 첫번째 생각은 사용될 수있는 특성 프록시 [T]를 정의했다 :

class FooProxy(val self: Foo) extends Proxy[Foo] {
   // added behavior
   def mymethod = ...
}

특성 프록시 [T]를 물론 T.를 확장하는 경우,이 컴파일러 마법없이 프록시 특성을 정의하는 데 실제로 수 없습니다.

나의 다음 생각은 (이러한 능력은 분명 기존의 컴파일러에없는, 또는 그 (14 개) 프록시 특성에 대한 소스가 훨씬 작은 것) 컴파일러 플러그인을 찾아이었다. 과연, 나는 케빈 라이트의 자동 프록시 플러그인을 발견했다. 플러그인은 (동적 유지 mixin 포함) 다른 사용 사례와 함께 깔끔하게 프록시 문제를 해결하기위한 것입니다 :

class FooProxy(@proxy val self: Foo) { ... }

불행히도, (2009) 11 월에 정체 거기에 일처럼 보인다. 그래서, 내 질문은

해결법

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

    1.네 질문에 네 개의 답변

    네 질문에 네 개의 답변

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

    2.아담 Warski 최근 스칼라 2.11에서 작동 확실히 스칼라 2.10에서 매크로 파라다이스 컴파일러 플러그인과 함께 작동 할 수있는 매크로 기반의 접근 방식에 대해 블로그.

    아담 Warski 최근 스칼라 2.11에서 작동 확실히 스칼라 2.10에서 매크로 파라다이스 컴파일러 플러그인과 함께 작동 할 수있는 매크로 기반의 접근 방식에 대해 블로그.

    이 라이브러리는 당신이 쓸 수 것

    class FooProxy(@delegate wrapped: Foo) extends Foo {
        // added behavior
        def mymethod = ...
    
        // forwarding methods (generated for you)
        // def method1 = wrapped.method1
        // def method2(arg: String) = wrapped.method2(arg)
    }
    

    주의가 보장되도록 프로젝트는이 글을 쓰는 시점에서 매우 일찍, 개념 증명, 단계에있다.

  3. from https://stackoverflow.com/questions/3473309/proxies-delegates-in-scala by cc-by-sa and MIT license