2016-08-06 9 views
0

test 매개 변수를 process_data 안에 수정하고 test 값에 따라 해당 함수 외부의 케이스를 전환해야합니다.새 인수를 허용하지 않는 함수를 참조로 전달하는 방법은 무엇입니까?

process_data은 수신 된 udp 패킷을 처리하기위한 정적 기능을 나타내며 '크기 및 데이터'매개 변수를 두 개 이상 허용하지 않으므로 upvar을 사용하여 참조로 전달할 수 없습니다.
또한, 찾은 한 process_data 함수에 대한 반환 값이 없습니다.

코드 :

set test "0" 

Agent/UDP instproc process_data {size data} { 
    //some stuff 
    if (...) 
     set test "1" 
} 

// switch cases depending on test value. 

답변

1

당신은 당신이 별칭에 가고있는 변수의 이름을 알고있는 경우 upvar를 사용하는 추가 인수가 필요하지 않습니다. 당신은 다음 중 하나를 수행 할 수 있어야한다 (하지 사용 모두 수행) : 정말 고전 모듈성이 아니다

global test 
upvar #0 test test 

을,하지만 작동합니다.

명령을 넣어 좋은 곳과 같이, 프로 시저 본문의 시작 부분에 : 당신이 upvar #0 test test를 사용하는 경우

Agent/UDP instproc process_data {size data} { 
    global test 
    # some stuff 
} 

같은 것 (두 명령은 기본적으로 동일하다).

문서 : global, upvar

+0

내가 TCL 코딩 전문가 아니에요, 그래서 당신은 각을 넣어 만약 당신이 좋아하면 내 예제를 사용하는 경우보다 구체적으로 답변을 편집하십시오 할 수 있습니다. 감사합니다 –

+0

@ EmadAldeen : 완료되었습니다. –

+0

'process_data' 안에는'test'를 원하는대로 변경할 수 있습니다 만,'process_data' 밖에서는 처음에 설정 했으므로'0 '으로 유지됩니다. –