「length」というローカル変数を使う際に注意すべきこと
import std.stdio;int main()
{
static char str = "123456789";
// TEST 1
int length = search(str, '5');
writef("%s\n", str[0 .. length]);
// TEST 2
int len = search(str, '5');
writef("%s\n", str[0 .. len]);
return 0;
}int search(char str, char c)
{
for (int i = 0; i < str.length; ++i) {
if (str[i] == c) {
return i;
}
}
return -1;
}
#--
>dmd length.d
>length
123456789
1234
上記のように変数名の違いで結果が変わる。
これは、配列の添え字内では、ローカル変数よりも配列のlengthプロパティが優先されるため、`length' -> str.lengthと解釈されるのが原因。