Comment detail
変数の初期値 (Nested Flatten)お題投稿者ではありませんが、勝手に答えると my $var ||= 'foo'; というコードは$varという変数がnilのときだけ'foo'を代入するもので 「この不備」と言われているのはコード中のどこかで$varにnilが代入された場合に 上記のコード部分で望まない代入が起きることでしょう。 $zero //= 25; こちらのコードなら確実に一度だけの初期化が行われるようです。 このコードの使い道は、と言えば、Cにおける手続き内でのstatic変数の同等機能の実現などが 考えられます。 という解釈の元に#5950を投稿しましたが、全然外してたりして。
つまり定数を宣言すればよいということでしょうか…。 const string hoge = "piyo"; これだと宣言時に値が確定してないときには具合が悪いですね。 こんなのはどうでしょう? わかりにくいですね…。
1 2 | string hoge;
hoge = hoge == "" ? "piyo" : hoge;
|
すみません。これだとコンパイル出来ませんね。
1 2 | string hoge = "";
hoge = hoge == "" ? "piyo" : hoge;
|
> my $var ||= 'foo';
>というコードは$varという変数がnilのときだけ'foo'を代入するもので
であれば余り問題は無いのですが,このコードは以下のコードと同じ意味になります。
my $var = $var || 'foo'; #||は短絡演算子
問題中にある様に変数の宣言と一緒にやる場合には然程問題になりませんが,perlでは0は偽として評価されるので,値が設定されていない場合に初期値を設定する意図で使用するケースで,以下の様に問題が出る場合があるのです。
my $var;
[..snip..]
$var = 0;
[..snip..]
$var ||= 1; #0が設定されている場合は0のままとするつもり
>というコードは$varという変数がnilのときだけ'foo'を代入するもので
であれば余り問題は無いのですが,このコードは以下のコードと同じ意味になります。
my $var = $var || 'foo'; #||は短絡演算子
問題中にある様に変数の宣言と一緒にやる場合には然程問題になりませんが,perlでは0は偽として評価されるので,値が設定されていない場合に初期値を設定する意図で使用するケースで,以下の様に問題が出る場合があるのです。
my $var;
[..snip..]
$var = 0;
[..snip..]
$var ||= 1; #0が設定されている場合は0のままとするつもり





あにす
#5952()
Rating9/11=0.82
すみません。Perlが読めません。 ”この不備を補うため”とありますが、 my $var ||= 'foo'; にはどんな不備があるのでしょうか? これは$var型の変数myを宣言し、fooを代入しているということでいいのでしょうか? 文字列型varにfooを代入しているようにも見えます。 Defined-or演算子とは何でしょうか?検索してもすぐには見付けられませんでした。 ”//”がDefined-or演算子ということでいいのでしょうか? ”変数のデフォルト設定”とは変数の初期化とどう違うのでしょうか? それとも、初期化前の値を、型ごとに決めるということでしょうか?初期化前の値を決めることに合理性が見出せないので考えにくいですが…。 お題は自然言語のみで題意を理解出来るようにして欲しいと思います。
1 reply [ reply ]