TCL 내장 unknown
절차를 변경했습니다 . 나는 한 개명 unknown
을_unknown
하고 새로운 미지의 과정에서 일부 사용자 지정 검사를 수행. 문제는 파레이 명령을 중단했다는 것입니다. 배열을 설정하고 구문 분석하면 메시지가 인쇄됩니다.invalid command name "parray abc"
아래는 코드입니다
rename unknown _unknown
proc unknown args {
puts "inside unknwn proc"
if { ![regexp {65ABC::\w+\s.*} $args] } {
uplevel 1 [list _unknown $args]
} else {
regexp {(65SABC::\w+)\s+(.*)} $args - procName params
regsub {65ABC::} $procName "65ABC8X::" procName
eval "$procName $params"
}
}
set abc(1) one
parray abc
inside unknwn proc
invalid command name "parray abc"
문제는 다음과 같습니다.
uplevel 1 [list _unknown $args]
이는 전체 인수 목록이 단일 인수로 해석되도록 강제합니다. 따라서 이상한 명령 이름입니다. 정확히 말하면 문제는 (당신이 정말로 부르고 싶은) uplevel 1 {_unknown {parray abc}}
대신에 동등한 것을 호출하게 uplevel 1 {_unknown parray abc}
되는 것이 었습니다. Tcl은 일반적으로 단어 경계와 오류 메시지에 대해 매우 정확합니다. 주의 깊게 읽으면 무엇이 잘못되었는지 정확하게 알려줍니다.
다음 중 하나 여야합니다 .
uplevel 1 [list _unknown {*}$args]
uplevel 1 _unknown $args
8.5 또는 8.6을 사용하는 경우 첫 번째를 선호하십시오. 8.4 (또는 이전)에서 두 번째를 사용하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다