6.3.2 정적 확장 메타데이터(Static Extension Metadata)

6.3.2 정적 확장 메타데이터(Static Extension Metadata)

Haxe 4.0.0 이후

정적 확장에서 제외(Exclusion from Static Extension)

기본적으로 클래스를 정적 확장으로 사용하면 그 모든 static 메서드가 문맥에 들어와, 적절한 타입의 확장으로 사용되게 합니다. 특정 상황에서 클래스는 정적 확장을 위한 것이 아닌 다른 static 메서드를 제공할 수 있어요. 그것들이 타입의 적절한 메서드를 방해하지 않도록, 그 메서드들은 @:noUsing으로 표시할 수 있습니다:

using Main.IntExtender;

class IntExtender {
  @:noUsing static public function double(i:Int) {
    return i * 2;
  }

  static public function triple(i:Int) {
    return i * 3;
  }
}

class Main {
  static public function main() {
    // works:
    trace(12.triple());
    // does not work because the method is marked with @:noUsing:
    // trace(12.double());
    // works as a normal static method:
    trace(IntExtender.double(12));
  }
}

기본 정적 확장(Default Static Extension)

또한 주어진 타입에 대해 특정 정적 확장을 항상 활성화하는 것도 가능합니다. 타입을 @:using(args...) 메타데이터로 주석 처리하면 됩니다. 인자는 타입의 전체 점 경로입니다:

@:using(StringTools)
class Main {
  static public function main() {
    "  foo  ".trim();
  }
}

@:using(StringTools) 주석은 Main 클래스에서 StringTools를 항상 사용 가능하게 만들어, 명시적 using StringTools; 없이도 .trim()을 호출할 수 있게 합니다. (예제의 상세는 원문 참조)

출처: Static Extension Metadata

본문

@:noUsing

정적 확장으로 쓰이지 않아야 할 메서드를 @:noUsing으로 표시해, 접미 호출로는 사용할 수 없지만 일반 static 메서드로는 호출할 수 있습니다.

@:using

타입에 @:using(경로)를 붙이면 그 타입에서 기본 정적 확장을 항상 활성화합니다.

더 알아보기