[#38080] ポートが閉じているときの例外など — Mitsuru Ogino <ogino@...>

荻野と申します。いつも質問や要望ばかりですみません。

36 messages 2003/08/11
[#38086] Re: ポートが閉じているときの例外など — nobu.nakada@... 2003/08/12

なかだです。

[#38088] Re: ポートが閉じているときの例外など — IWAOKA Masahiro <iwaoka@...> 2003/08/12

いわおかです。

[#38091] Re: ポートが閉じているときの例外など — Mitsuru Ogino <ogino@...> 2003/08/12

荻野です。

[#38092] Re: ポートが閉じているときの例外など — nobu.nakada@... 2003/08/12

なかだです。

[#38093] Re: ポートが閉じているときの例外など — IWAOKA Masahiro <iwaoka@...> 2003/08/12

いわおかです。

[#38095] Re: ポートが閉じているときの例外など — Takahiro Kambe <taca@...> 2003/08/12

In message <20030812150516.GV37221@barber.fe.rn.tuat.ac.jp>

[#38102] Re: ポートが閉じているときの例外など — Tetsuo NAKAGAWA <tet@...> 2003/08/14

中川と申します。

[#38121] Re: ポートが閉じているときの例外など — Takahiro Kambe <taca@...> 2003/08/15

In message <20030814.140757.707824131.tetsuo@sapphire.siz.nes.nec.co.jp>

[#38123] Re: ポートが閉じているときの例外など — nobu.nakada@... 2003/08/16

なかだです。

[#38130] Re: ポートが閉じているときの例外など — Takahiro Kambe <taca@...> 2003/08/16

In message <200308160517.h7G5HcPL012839@sharui.nakada.kanuma.tochigi.jp>

[#38137] Re: ポートが閉じているときの例外など — nobu.nakada@... 2003/08/18

なかだです。

[#38139] Re: ポートが閉じているときの例外など — Takahiro Kambe <taca@...> 2003/08/18

In message <200308180959.h7I9xnb7001977@sharui.nakada.kanuma.tochigi.jp>

[#38122] ruby-tcpwrap and mkmf.rb — Takahiro Kambe <taca@...>

こんにちは。

16 messages 2003/08/16
[#38125] Re: ruby-tcpwrap and mkmf.rb — "Akinori MUSHA" <knu@...> 2003/08/16

At Sat, 16 Aug 2003 12:51:55 +0900,

[#38183] String << の動作につきまして — kuto@...

うと と申します。

44 messages 2003/08/22
[#38187] Re: String << の動作につきまして — Take_tk <ggb03124@...> 2003/08/22

たけ(tk)です。

[#38189] Re: String << の動作につきまして — Tadayoshi Funaba <tadf@...5.so-net.ne.jp> 2003/08/23

ふなばです。

[#38190] Re: String << の動作につきまして — Take_tk <ggb03124@...> 2003/08/23

たけ(tk)です。

[#38191] Re: String << の動作につきまして — Tadayoshi Funaba <tadf@...5.so-net.ne.jp> 2003/08/23

ふなばです。

[#38194] Re: String << の動作につきまして — Take_tk <ggb03124@...> 2003/08/23

たけ(tk)です。

[#38196] Re: String << の動作につきまして — Tadayoshi Funaba <tadf@...5.so-net.ne.jp> 2003/08/23

ふなばです。

[#38203] Re: String << の動作につきまして — 西 啓一朗 <receiver@...> 2003/08/23

ども、西啓一朗@Ktouth Brand. です。

[#38208] Re: String << の動作につきまして — Tadayoshi Funaba <tadf@...5.so-net.ne.jp> 2003/08/23

ふなばです。

[#38211] Re: String << の動作につきまして — 西 啓一朗 <receiver@...> 2003/08/24

ども、西啓一朗@Ktouth Brand. です。

[#38195] 理解の進め方(Re: String << の動作につきまして) — Tadashi Oh-Ya <toy@...>

おおやです。

36 messages 2003/08/23
[#38206] 理解の進め方:シュールな世界 — Take_tk <ggb03124@...> 2003/08/23

たけ(tk)です。

[#38233] シュールな名前 — Take_tk <ggb03124@...> 2003/08/25

たけ(tk)です

[#38198] Tmailで送るメールに日付がつけられなくなりました — 川田誠司 <kawada.seiji@...>

はじめまして

11 messages 2003/08/23

[#38256] かみ砕いた説明をすべき範囲 — 西 啓一朗 <receiver@...>

ども。西啓一朗@Ktouth Brand. です。

41 messages 2003/08/26
[#38258] Re: かみ砕いた説明をすべき範囲 — nobu.nakada@... 2003/08/26

なかだです。

[#38261] Re: かみ砕いた説明をすべき範囲 — Take_tk <ggb03124@...> 2003/08/26

たけ(tk)です

[#38262] Re: かみ砕いた説明をすべき範囲 — nobu.nakada@... 2003/08/26

なかだです。

[#38264] Re: かみ砕いた説明をすべき範囲 — Take_tk <ggb03124@...> 2003/08/26

たけ(tk)です

[#38265] Re: かみ砕いた説明をすべき範囲 — IWAOKA Masahiro <iwaoka@...> 2003/08/26

いわおかです。

[#38267] Re: かみ砕いた説明をすべき範囲 — Take_tk <ggb03124@...> 2003/08/26

たけ(tk)です

[#38273] Re: かみ砕いた説明をすべき範囲 — matz@... (Yukihiro Matsumoto) 2003/08/26

まつもと ゆきひろです

[ruby-list:38187] Re: String << の動作につきまして

From: Take_tk <ggb03124@...>
Date: 2003-08-22 12:46:13 UTC
List: ruby-list #38187
たけ(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


In This Thread