次のコードは無限ループを生成します。 アッ{ … }
範囲内のローカル変数はサポートされていません。。
#! /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;
}
}
この問題を解決する方法は2つあります。
- ループ変数を
i
パラメータとして宣言、例えばmyfunction( i)
。
ノート前の余白はi
コーディング規則であり、パラメータでi
はなくローカル変数であることを示します。。
- 「衝突」を防ぐには、命名規則を使用してください。、例えば
_module_begin_loop
、_module_myfunction_loop
。
myfunction()
ループ内で必ずしも呼び出されるわけではないので、ループ変数を使用する最初の解決策は非常にトリッキーであることがわかりました。 2番目のケースでは、名前が長すぎて読みやすくなる可能性があります。
ベストアンサー1
この質問を準備しながら答えを見つけました。他の答えも歓迎します。
大きいアッ次のプロジェクト翻訳シェル最初の回避策を使用してください。
function parseList(returnAST, tokens,
leftBrackets,
rightBrackets,
separators,
####
i, j, key, p, stack, token) {
...
}
次のパラメータは####
ローカルです。
アッparseList(ast, tokens)
あるいは、より少ない数の引数で関数を呼び出すこともできますparseList(ast, tokens, lb, rb, sep)
。したがって、署名だけが複雑です。