[#38020] irb で %W(#{...}) — yoshihisa masuda <sacong@...>
マスダといいます。
[#38036] undef variable — hirocy <hirocy@...>
hirocyです.
[#38039] proc method — "K.Sasada" <ko1@...>
こんにちは。ささだです。
[#38056] ファイル書換え? — 中村文建 <tx6f-nkmr@...>
初めまして、MLに参加させて頂く中村と申します。
[#38057] [ANN] Ruby-GNOME2-0.6.0 — Masao Mutoh <mutoh@...>
むとうです。
[#38059] [ANN] rbbr-0.3.0 — Masao Mutoh <mutoh@...>
むとうです。
[#38073] module extendable? — Takeshi Horinouchi <horinout@...>
堀之内と申します。
[#38080] ポートが閉じているときの例外など — Mitsuru Ogino <ogino@...>
荻野と申します。いつも質問や要望ばかりですみません。
なかだです。
いわおかです。
荻野です。
なかだです。
いわおかです。
In message <20030812150516.GV37221@barber.fe.rn.tuat.ac.jp>
中川と申します。
In message <20030814.140757.707824131.tetsuo@sapphire.siz.nes.nec.co.jp>
なかだです。
In message <200308160517.h7G5HcPL012839@sharui.nakada.kanuma.tochigi.jp>
なかだです。
In message <200308180959.h7I9xnb7001977@sharui.nakada.kanuma.tochigi.jp>
なかだです。
まつもと ゆきひろです
[#38090] ruby-1.8 で eruby が SEGV — Kazuhiko <kazuhiko@...>
かずひこです。
[#38104] XMLRPC::ModRubyServer — OHARA Shigeki <os@...>
大原です。
[#38122] ruby-tcpwrap and mkmf.rb — Takahiro Kambe <taca@...>
こんにちは。
At Sat, 16 Aug 2003 12:51:55 +0900,
In message <200308160518.h7G5IXPL012842@sharui.nakada.kanuma.tochigi.jp>
なかだです。
In message <200308160714.h7G7ErPL014647@sharui.nakada.kanuma.tochigi.jp>
前田です。
In message <87d6f3znlc.wl@kirk.priv.netlab.jp>
前田です。
わたなべです。
[#38164] Ruby1.8.0でRuby-PostgreSQLがビルドできない — kensaku Maki <sakaki@...>
はじめまして、まきと申します。
[#38183] String << の動作につきまして — kuto@...
うと と申します。
たけ(tk)です。
ふなばです。
たけ(tk)です。
ふなばです。
たけ(tk)です。
ふなばです。
ども、西啓一朗@Ktouth Brand. です。
ふなばです。
ども、西啓一朗@Ktouth Brand. です。
[#38195] 理解の進め方(Re: String << の動作につきまして) — Tadashi Oh-Ya <toy@...>
おおやです。
たけ(tk)です。
In "[ruby-list:38206] 理解の進め方:シュールな世界"
たけ(tk)です
[#38198] Tmailで送るメールに日付がつけられなくなりました — 川田誠司 <kawada.seiji@...>
はじめまして
[#38256] かみ砕いた説明をすべき範囲 — 西 啓一朗 <receiver@...>
ども。西啓一朗@Ktouth Brand. です。
なかだです。
たけ(tk)です
なかだです。
たけ(tk)です
いわおかです。
たけ(tk)です
まつもと ゆきひろです
たけ(tk)です。
たけ(tk)です。
[ruby-list:38187] Re: String << の動作につきまして
たけ(tk)です。 * すみません、間違ってボタンを押してしまったようで、書きかけのものを送っ てしまいました。 [ruby-list:38183] String << の動作につきまして にて kuto@d-itlab.co.jp さん 曰く: > (1) % ruby -e "s = ARGV[0]; puts s.frozen?" > false これは ARGV[0] が 空(nil)だからでしょう。 文字列が入っている場合にはtrueになります。 G:\DOWNLOAD\ruby-1.8.0-20030404-i386-mswin32\bin>ruby -e "s = ARGV[0]; puts s.frozen?; p ARGV[0].frozen?" foo true true > (2) % ruby -e "s = ARGV[0]; s << 'hoge'; puts s" foo > -e:1:in `<<': can't modify frozen string (TypeError) > from -e:1 これは『Rubyの冒険 旅立ち編』のp.204からp.216の10ページほどかけて説 明した「破壊的メソッド」と「オブジェクトの共有」の問題です。 簡単に言うと、 (1) s = ARGV[0] の時点で、変数sの中身のオブジェクトはARGV[0]の中身と同じもの(文字列オブ ジェクトの"foo")を差すようになります。(オブジェクトの共有)。 ARGV[0]が文字列である場合には、freeze されています。(ruby1.8)したがっ て、変数sの中身のオブジェクトはそれと同一のオブジェクトなので、当然なが らfreezeされています。 (2) s << 'hoge' 文字列オブジェクトが左側にある<<演算子はString#<<なので破壊的メソッドで す。破壊的メソッドでは変数に入っているオブジェクト自体を変更しようとしま す。これはobject_idメソッドを使ってオブジェクトの同一性を確認すればわか ります(後述)。 変数sとARGV[0]のオブジェクトが同一である場合には、変数sで破壊的メソッド を使用すると、ARGV[0]のオブジェクトも変更しようとすることになります。 しかし、(1)で見たように、そのオブジェクトはfreezeされているので、エラー になります。 > (3) % ruby -e "s = ARGV[0]; s += 'hoge'; puts s" foo > foohoge +=演算子の場合には新しいオブジェクトを作成して、変数sに新しいオブジェク トを入れます。新しく作成したオブジェクトに入れ換えることになるので、 ARGV[0]のオブジェクトには影響を与えません。もともと変数sに入っていたfreeze された文字列は追い出されるだけということになります。 ---- <<演算子と+=演算子の違いはオブジェクトのIDを調べてみるとはっきりします。 <<演算子の場合にはオブジェクトのIDが変わりませんが、+=演算子の場合にはID が変わります。つまり、別のオブジェクトに入れ替わります。 G:\DOWNLOAD\ruby-1.8.0-20030404-i386-mswin32\bin>ruby -e "s = 'foo'; p s.id;s<<'bar';p s.id; p s" 21121572 ←オブジェクトのIDは変わらない 21121572 ←つまり、同じオブジェクト "foobar" G:\DOWNLOAD\ruby-1.8.0-20030404-i386-mswin32\bin>ruby -e "s = 'foo'; p s.id;s+='bar';p s.id; p s" 21121560 ←元のID 21121524 ←オブジェクトのIDが変わる。オブジェクトが入れ替わった。 "foobar" take_tk = kumagai hidetake