2013-07-20 4 views
1

ada의 다른 파일에서 입력란에 액세스하는 방법에 관한 질문이 있습니다.필드에 액세스하는 방법?

내가가는이 한 가지 유형이 있습니다

type Token_Type is (INT_LIT_TOK, IDENT_TOK, ASSIGN_OP_TOK, ADD_OP_TOK, 
        SUB_OP_TOK, MULT_OP_TOK, DIV_OP_TOK, LE_TOK, LT_TOK, 
        GE_TOK, EQ_TOK, NE_TOK, GT_TOK, EOS_TOK, IF_TOK, 
        PRINT_TOK, DO_TOK, WHILE_TOK, THEN_TOK, ELSE_TOK, 
        LOOP_TOK, LEFT_PAREN_TOK, RIGHT_PAREN_TOK, MAIN_TOK, 
        SUB_TOK, END_TOK); 

을 지금은 다른 파일을 가지고 내가 그 유형 중 하나가 어떤 있는지 확인하기 위해 comparaison을하고 싶은 곳을, 그래서 나는

tok = Token_Type.INT_LIT; 
했다

하지만이 줄의 두 번째 부분을 좋아하지 않는 것 같습니다. 다른 파일의 필드에 액세스하는 방법에 대해 뭔가를 놓쳤습니까?

유형 Token_Type 당신의 선언이 Some_Package에 선언하고, tok 유형 Some_Package.Token_Type이다 주어진 경우
+1

Nevermind, 패키지 이름을 사용하지 않고 패키지 이름에 액세스해야한다는 것을 알았습니다. 고맙습니다. – Niehm

+0

당신은 @Lancelot 6 답변을 수락 할 수 있습니다. – NWS

답변

2

, 당신은

tok = Some_Package.INT_LIT 
0

일부 추가 설명을 입력한다 : 당신은 패키지 이름 경우를 사용할 필요가 없습니다 에이다 2012 년

procedure Something is 
    use Some_Package; 
begin 
    if tok = INT_LIT then ... 
end Something; 

또는 :

당신의 문에 적용됩니다 패키지를 언급 ​​유스 조항이있다
procedure Something is 
    use all type Some_Package.Token_Type; 
begin 
    if tok = INT_LIT then ... 
end Something; 

당신이 정말로 유형 이름이 포함하려면, 분명히 당신이 무슨 일을하는지 독자에게, 당신은 또한

if tok = Some_Package.Token_Type'(Some_Package.INT_LIT) then ... 

을 말할 수 있도록 당신이 무엇을 사용에 따라 Some_Package. 접두사를 제거 할 수 있습니다 조항이 적용됩니다. 때로는 코드를 작성하여 INT_LIT 이름이 모호하고 컴파일러가 INT_LIT의 다른 의미가 불가능하다고 판단 할 수있는 컨텍스트가 충분하지 않은 경우가 있습니다.

관련 문제