>[mugenkai@love] % diksam if.dkm
>if.dkm: 8:変数名bが重複しています。
これですね。
int a = 10;
if (a > 5) {
int b = 20;
println("<1>b.." + b);
} else {
int b = 30;
println("<2>b.." + b);
}
わかりにくい仕様ですが、これで「変数名bが重複しています。」エラーになるのは
現状のDiksamでは仕様です。
言語仕様の「ローカル変数」のところで、以下のように書いています。
http://kmaebashi.com/programmer/devlang/dls_0_4_01.html
>関数内で宣言された変数はローカル変数(local variable) となる。
>ローカル変数のスコープは、以下の両方の条件を満たす範囲である
>(現状で、グローバル変数のスコープは、ブロックの影響を受けない)。
ここでのbは関数内で宣言された変数ではないので、グローバル変数です。
グローバル変数のスコープはブロックの影響を受けないので、ifのブロック内であっても
二重に宣言することはできません。
# 仕様書に書けばバグも仕様に変わる、レベルの話かもしれませんが。
testフォルダにif.dkmが入っているのは、エラーになることを確認した残骸では
ないかと思います…… まぎらわしくてすみません。