수색…
통사론
- 추상 식별자 ( underyling type ) {...}
- b를 입력 b를 입력으로 행 ... TYPEA에 TYPEA에서 추상적 식별자 (기본 타입) {...}
비고
추상 형식 은 런타임에 기본 형식 으로 확인 되는 컴파일 타임 형식입니다. 즉, Haxe 컴파일러가 생성 한 소스 코드 에는 추상 형식 이 존재하지 않습니다 . 대신에 암시 적 캐스팅에 정의 된 기본 유형 또는 유형이 배치됩니다.
초록은 abstract 키워드로 표시되고 그 뒤에 식별자 및 괄호 안에 기본 유형이 표시됩니다.
초록은 메소드 필드와 비 물리적 속성 필드 만 정의 할 수 있습니다. 인라인되지 않은 메소드 필드는 private 구현 클래스 에서 정적 함수로 선언되며, 추가 된 첫 번째 인수로 기본 유형의 추상을 허용합니다.
연산자 오버로딩은 추상 유형에서만 가능합니다.
데이터 검증을위한 초록
다음의 초록은 정규 표현식을 사용하여 전달 된 인수를 전자 메일 주소로 유효화 할 String 유형을 기반으로 EmailAddress 유형을 정의합니다. 주소가 유효하지 않은 경우 예외가 발생합니다.
abstract EmailAddress(String) {
static var ereg = ~/^[\w-\.]{2,}@[\w-\.]{2,}\.[a-z]{2,6}$/i;
inline public function new(address:String) {
if (!ereg.match(address)) throw "EmailAddress "$address" is invalid";
this = address.toLowerCase();
}
}
다음과 같이 초록을 사용하십시오.
var emailGood = new EmailAddress("[email protected]");
var emailBad = new EmailAddress("john.doe.com");
try.haxe.org 에서 예제를 시도해보십시오.
참고 문헌
연산자 오버로딩
연산자 오버로딩 은 추상 유형에서만 가능합니다.
다음 초록에서는 Array<Int> 유형을 기반으로 Vec2i 유형을 정의합니다. 이것은 정수 값을 갖는 2 성분 벡터입니다. 연산자 오버로딩은 @:op 컴파일러 메타 데이터를 가능하게 합니다. 사용 가능한 숫자 연산자 만 오버로드 될 수 있습니다. 사용자 지정 연산자는 지정할 수 없습니다.
abstract Vec2i(Array<Int>) {
public inline function getX() : Int {
return this[0];
}
public inline function getY() : Int {
return this[1];
}
public inline function new(x : Int, y : Int) {
this = [x, y];
}
@:op(A + B)
public inline function add(B : Vec2i) : Vec2i {
return new Vec2i(
getX() + B.getX(),
getY() + B.getY()
);
}
}
다음과 같이 초록을 사용하십시오.
var v1 = new Vec2i(1, 2);
var v2 = new Vec2i(3, 4);
v1 + v2;
v1.add(v2);
try.haxe.org 에서 예제를 시도해보십시오.
참고 문헌
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow