다음 코드는 무한 루프를 발생시킵니다. 앗{ … }
범위 내의 지역 변수는 지원되지 않습니다..
#! /usr/bin/gawk -f
function myfunction() {
for (i = 5; i < 8; i++){
print "in myfunction(), i="i
}
}
BEGIN {
for (i = 0; i < 10; i++) {
myfunction();
print i;
}
}
이 문제를 해결하는 방법에는 두 가지가 있습니다.
- 루프 변수를
i
매개변수로 선언,예를 들어myfunction( i)
.
노트앞의 추가 공백은 i
코딩 규칙이며 i
매개변수가 아닌 지역 변수임을 나타냅니다..
- "충돌"을 방지하려면 명명 규칙을 사용하세요.,예를 들어
_module_begin_loop
,_module_myfunction_loop
.
myfunction()
루프 내에서 반드시 호출되지는 않기 때문에 루프 변수를 사용하는 첫 번째 솔루션이 매우 까다롭다는 것을 알았습니다 . 두 번째 경우에는 이름이 너무 길어져서 가독성이 떨어질 수 있습니다.
답변1
이 질문을 준비하면서 답을 찾았습니다. 다른 답변도 환영합니다.
더 큰앗다음과 같은 프로젝트번역 쉘첫 번째 해결 방법을 사용하세요.
function parseList(returnAST, tokens,
leftBrackets,
rightBrackets,
separators,
####
i, j, key, p, stack, token) {
...
}
다음 매개변수는 ####
로컬입니다.
앗parseList(ast, tokens)
또는 같은 더 적은 수의 인수로 함수를 호출할 수 있습니다 parseList(ast, tokens, lb, rb, sep)
. 따라서 서명만 복잡합니다.