Issue #877 (スコープがTemporal Window) が消えたので再度立てます。
現行のAiScriptでは、変数の参照方式はTemporal Windowで実装されています。
以下のコードのようにスコープで定義される前の参照は外側の同名の変数を参照することができます。
let x = 0
eval {
@f() {
x
}
<: f() // => 0
let x = 1
<: f() // => 1
}
Temporal Windowでは同じ参照でも実行タイミングにより実体の定義場所が異なることがあり、静的解析が困難になる問題があります。
そこで、定義の前に変数を使用すると外側に同名の変数が存在してもエラーとするTemporal Dead Zoneとします。
let x = 0
eval {
@f() {
x
}
// <: f() // [RuntimeError] Runtime: Cannot access 'x' before initialization
let x = 1
<: f() // => 1
}
参考 (Temporal Dead Zoneについて): https://zenn.dev/qnighy/articles/f3d2d7adc75948
Issue #877 (スコープがTemporal Window) が消えたので再度立てます。
現行のAiScriptでは、変数の参照方式はTemporal Windowで実装されています。
以下のコードのようにスコープで定義される前の参照は外側の同名の変数を参照することができます。
Temporal Windowでは同じ参照でも実行タイミングにより実体の定義場所が異なることがあり、静的解析が困難になる問題があります。
そこで、定義の前に変数を使用すると外側に同名の変数が存在してもエラーとするTemporal Dead Zoneとします。
参考 (Temporal Dead Zoneについて): https://zenn.dev/qnighy/articles/f3d2d7adc75948