2014-04-06 4 views
1

에 매개 변수 전달 : 함수에 매개 변수를 전달을 ...Haxe 매크로 - 내가 매크로와 네브라스카 문제가있어 매크로

나는 그런 내 함수에 문자열을 전달하고 싶은

:

macro public static function getTags(?type : String) 

하지만 컴파일 오류가 발생했습니다 (수신 된 Expr 및 예상 된 문자열). 그래서, 설명서에 따라, 내가 그랬어 :

macro public static function getTags(?type : haxe.macro.Expr.ExprOf<String>) {} 

멋진,하지만 내 문제는 지금 그 다음 어떻게 문자열 값에 액세스하려면? 그건 내가 내 유형을 추적하면 내가 이것을 가지고, 사실 .. 사용하기 정말 쉬운 일이 아니다 :

{ expr => EConst(CIdent(type)), pos => #pos(lib/wx/core/container/ServiceContainer.hx:87: characters 36-40) } 

내가 type.expr에 전환 할 수 있다고 생각하지만, 내 CONST는 변수 이름이 아닌 값을 포함 .. 어떻게 값에 액세스 할 수 있습니까? 그리고이 값을 얻는 더 쉬운 방법이 있습니다 (예를 들어 스위치없이).

내가 생각하는 그 함수의 호출이 매크로에없는, 그리고 내가하고 싶은 것은 불가능하다고 생각하지만, 나는

당신에게

답변

2

감사 :) 물어 선호하기 때문에 당신이 언급 한 것처럼, variable capture in pattern matching를 사용 : 위의 그림과 같이 입력 표현식이 리터럴 문자열 인 경우, 매크로 기능은 문자열 값을 추출 할 수 있습니다

class Test { 
    macro public static function getTags(?type : haxe.macro.Expr.ExprOf<String>) { 
     var str = switch(type.expr) { 
      case EConst(CString(str)): 
       str; 
      default: 
       throw "type should be string const"; 
     } 
     trace(str); 
     return type; 
    } 
    static function main() { 
     getTags("abc"); //Test.hx:10: abc 

     var v = "abc"; 
     getTags(v); //Test.hx:7: characters 13-18 : type should be string const 
    } 
} 

공지있다. 매크로 함수는 컴파일 타임에 실행되므로 변수의 런타임 값을 알 수 없음을 기억하십시오.

+0

감사합니다. 내가 생각했던 것입니다.하지만 확인을 원했습니다. :) – Peekmo