«前の日記(2007-03-06 (火)) 最新 次の日記(2007-03-08 (木))» 編集
にっき
Google
2003|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|10|12|
2015|01|12|
2016|01|12|
2017|01|

2007-03-07 (水) [長年日記]

_ アナログテレビ最大6400万台がゴミに 地デジ移行で

何をいまさら。最初から分かっていたことじゃないか。

_ イテレータ引数がブロック外の変数を上書きする

$ ruby -e 'a=0;[1].each{|a|};p a'
1

|a| はブロック内でしか使われないので、ブロック外の変数を汚染するのは感覚的に変だと思うんだが。

ブロックの先頭に、仮引数を||で囲って置くと、実引数が多重代入されます。この仮引数は、普通のローカル変数で、ブロックの外側ですでに使われている変数の場合は、そのスコープになりますので、注意が必要です。

_ tips - suよりもsudo

今やOS Xではルートユーザーは無効のまま使うのがスタンダード。

うお、そうだったのか。ルートユーザーを有効にしないと sudo も使えないと思ってたよ。

_ ちょっぴりオシャレな QR コードが作れる Web サービス

オレンジニュースより。

QRコード画像に文字なんか入れられるんだねぇ。

本日のツッコミ(全8件) [ツッコミを入れる]
_ poppen (2007-03-07 (水) 23:41)

Rubyを始めたばかりの時にハマりました。 > イテレータ引数がブロック外の変数を上書きする

_ えろぺお (2007-03-08 (木) 10:56)

FAQになってるってことは、この仕様で問題ないという判断なんですかねぇ。

_ きむら (2007-03-08 (木) 13:02)

ブロックローカルの変数をどうするかという問題と一緒に議論されたことがあると思います。<br>記述を工夫するとか幾つか案は出ましたが決定打は出ませんでした。<br>ということで、現状の仕様で問題ないとはまつもとさんも考えてはいないと思います。<br>上記の議論はruby-devあたりだったと思いますが、具体的な番号は<br>わかりません。ごめんなさい。

_ えろぺお (2007-03-08 (木) 15:55)

イテレータ変数がブロック外の変数を上書きしたほうがいい(または上書きせざるをえない)理由が思いつかないのですが…。

_ きむら (2007-03-08 (木) 16:05)

えと、狙って今の仕様(同じ名前で上書き発生)にしたのではなく、<br>結果としてそうなってしまっているというものだと記憶しています。<br>理由としては「やりやすい実装でやってみたらそういう動作になってしまった」<br>くらいのところでしょうか?

_ きむら (2007-03-08 (木) 16:56)

とりあえずこんなところ → http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/17487 <br>が見つかりました。<br>元発言をたどっていけばそれなりにボリュームがあります。<br>あと、http://takkan-m.katamayu.net/tdiary/index.rb?date=20061112 <br>のコメント欄でささださんが<br>> 1.9 から、ブロックパラメータ(|a|)はブロックローカル変数になるらしいですよ。<br>と書いてます。<br>#この話の記憶はないなあ…蒸発したか?

_ きむら (2007-03-08 (木) 17:11)

何度もすみません。ささださんが某所で1.9ではブロック変数の扱いが変わってるよとコメントしているのを見つけたので確認してみました。<br>puts RUBY_VERSION<br>x=1<br>puts "x=#{x}"<br>(1..5).to_a.each{|x| puts x}<br>puts "x=#{x}"<br>こんなスクリプトでやってみましたが、1.9では確かに<br>最後のputsでの出力がx=1になります(1.8では5)。

_ えろぺお (2007-03-08 (木) 17:50)

手元に 1.9 が無いので試せませんが、修正されてるなら嬉しいことです。ありがとうございました。


«前の日記(2007-03-06 (火)) 最新 次の日記(2007-03-08 (木))» 編集