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()을 호출할 수 있게 합니다. (예제의 상세는 원문 참조)
본문
@:noUsing
정적 확장으로 쓰이지 않아야 할 메서드를 @:noUsing으로 표시해, 접미 호출로는 사용할 수 없지만 일반 static 메서드로는 호출할 수 있습니다.
@:using
타입에 @:using(경로)를 붙이면 그 타입에서 기본 정적 확장을 항상 활성화합니다.