수색…


통사론

  • 추상 식별자 ( 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