次の関数について考えてみましょう。
def generateUniqueIdent(String text, uniqueSuffix = {uid -> String.valueOf(uid)}) {
doSomething(text) + uniqueSuffix()
}
さて、次の変更を試みると:
def generateUniqueIdent(String text, uniqueSuffix = { hash(text) }) {
doSomething(text) + uniqueSuffix()
}
..次のエラーが発生しました:
| エラーコンパイル中の致命的なエラーorg.apache.tools.ant.BuildException:BUG!ソースユニットのフェーズ「クラス生成」の例外「ここのパス」は、スタック変数としてテキストという名前の変数を取得しようとしましたが、この名前の変数は作成されませんでした(完全なトレースを表示するには--stacktraceを使用してください)
同時に、text
クロージャーのパラメーターとして名前を使用しようとすると、次のようになります。
def generateUniqueIdent(String text, uniqueSuffix = {text -> hash(text) }) {
doSomething(text) + uniqueSuffix(text)
}
..その後、別のエラーが発生しました:
現在のスコープには、名前テキストの変数がすでに含まれています
問題は、関数パラメーターの1つにデフォルト値として割り当てられているクロージャーから他のパラメーターにアクセスできるかどうかです。
いいえの場合、説明されているクロージャー内にある関数パラメーターの1つと同じ名前を使用できないのはなぜですか?