[#21157] あったらうれしいメソッド to_n, to_n!, to_s! — ogino@...

荻野です。あったらうれしいメソッドということで書いてみます。

16 messages 2000/03/03

[#21159] メソッドの入り口 — ogino@...

荻野です。もうひとつご指導ください。

93 messages 2000/03/03
[#21170] Re: メソッドの入り口 — Shin-ichiro Hara <sinara@...> 2000/03/03

原です。

[#21243] Re: メソッドの入り口 — keiju@... (石塚圭樹) 2000/03/07

けいじゅ@日本ラショナルソフトウェアです.

[#21247] Re: メソッドの入り口 — 中村暁史 Nakamura Akifumi <BXQ04723@...> 2000/03/07

[#21267] 引数コピーとオブジェクト指向 (Re: メソッドの入り口) — Hideto ISHIBASHI <s34204@...> 2000/03/08

石橋秀仁です。

[#21272] Re: 引数コピーとオブジェクト指向 (Re: メソッドの入り口 ) — 中村暁史 Nakamura Akifumi <BXQ04723@...> 2000/03/08

[#21276] Re: 引数コピーとオブジェクト指向 (Re: メソッドの入り口 ) — nobu.nakada@... 2000/03/09

なかだです。

[#21279] Re: 引数コピーとオブジェクト指向 (Re: メソッドの入り口 ) — ogino@... 2000/03/09

oop未満の世界観の荻野です。

[#21282] Re: 引数コピーとオブジェクト指向 — Tomoyuki Kosimizu <greentea@...2.so-net.ne.jp> 2000/03/09

越水です。

[#21285] Re: 引数コピーとオブジェクト指向 — ogino@... 2000/03/10

荻野です。

[#21293] Re: 引数コピーとオブジェクト指向 — Matsuo Hisanori <hisanori@...> 2000/03/10

松尾です。

[#21297] Re: 引数コピーとオブジェクト指向 — ogino@... 2000/03/10

荻野です。

[#21302] Re: 引数コピーとオブジェクト指向 — 土岐 仁謙 <toki@...> 2000/03/10

土岐です。

[#21371] Re: 引数コピーとオブジェクト指向 — Matsuo Hisanori <hisanori@...> 2000/03/13

松尾です。

[#21374] Re: 引数コピーとオブジェクト指向 — TADA Tadashi <sho@...> 2000/03/13

ただただしです。

[#21365] Re: 引数コピーとオブジェクト指向 — Matsuo Hisanori <hisanori@...> 2000/03/13

松尾です。

[#21280] raise non-Exception object — Kenichi Komiya <kom@...3.rim.or.jp>

24 messages 2000/03/09
[#21283] Re: raise non-Exception object — nobu.nakada@... 2000/03/09

なかだです。

[#21315] Re: raise non-Exception object — Kenichi Komiya <kom@...3.rim.or.jp> 2000/03/11

[#21342] Re: raise non-Exception object — nobu.nakada@... 2000/03/12

なかだです。

[#21384] ruby 1.4.4 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

35 messages 2000/03/13

[#21442] 配列内のソート — Takayuki Tanaka <tanaka@...>

こんにちは Tanです。

16 messages 2000/03/15

[#21583] ruby for Web — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

27 messages 2000/03/22
[#21584] Re: ruby for Web — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/03/22

なひです.

[#21649] net-1.1.10 — TAKAHASHI Masayoshi <maki@...>

高橋征義です。net/http 使いたおし中。

17 messages 2000/03/27

[#21669] new version of mod_ruby & eRuby — Shugo Maeda <shugo@...>

前田です。

14 messages 2000/03/28

[ruby-list:21378] Re: 引数コピーとオブジェクト指向

From: 土岐 仁謙 <toki@...>
Date: 2000-03-13 06:05:24 UTC
List: ruby-list #21378
土岐です。

わたしはべつにすべからくdupすべきというつもりで
はなかったんですが、あの書き方だとdupが印象に残るのかしら?

わたしの方針はcopy on write的というか、
他所から参照されているかもしれないオブジェクトに
破壊的な操作をするときは、安全のためdupしておく
というものです。

{Date} Mon, 13 Mar 2000 11:47:05 +0900
{Subject} [ruby-list:21365] Re: 引数コピーとオブジェクト指向
{Message ID} <38CC5698.C83CFFDD@sitc.toshiba.co.jp>
Matsuo Hisanori <hisanori@sitc.toshiba.co.jp> wrote...

Matsuo> そのPersonクラスのイニシャライザで、それぞれインスタンス変数に代入して
Matsuo> おこうと思うのです。で、どう実装するかですが、dupすることに関して以下
Matsuo> の取りうるやり方があると思います。さて、どれを選ぶのが適当でしょうか。

わたしも選択肢1です。
なぜならinitializeの中でname, age, sectionの指す
オブジェクトを変化させてないから。

Matsuo> このsection.dupは変ですよね? ならどうしてnameはdupして変だと感じないの
Matsuo> でしょうか?

name.dupが変だと感じないのは、後でname.sub!を使ってるからです。
Personオブジェクトがnameを参照していると、Personオブジェクトの
関知しないところでnameが変わったらなにかまずいことが起こるかも
しれないですから。
もっともわたしも sub! が一個だけなら

Matsuo> 何故 name = name.sub (....) を使わないのでしょうか。

こちらを使うことが多いです。
dupを使うのは、直後に連続して破壊的メソッドを
呼ぶときとなどが多いです。
こんな具合に。

def html_quote(data)
  data = data.dup
  data.gsub!(/&/, "&amp;")
  data.gsub!(/</, "&lt;")
  data.gsub!(/>/, "&gt;")
  data
end

Matsuo> sub と sub! の使い分けの基準はどうなっているのでしょうか?

上の例のように連続して呼び出す場合は(この場合はgsubだけど)
破壊的メソッドの方を呼びたくなります。
実用上はほとんど変わらないのだろうけど、なんとなく
破壊的メソッドの方が速度やメモリ消費の点で有利そうに思えるので。
あとIOから一行データを取って来た直後などは、他から
参照されてないことが分かっているので、加工するときに
破壊的メソッドを使うことが多いです(ちなみに、この場合は
当然dupは使わないです)。

{Date} Mon, 13 Mar 2000 13:44:06 +0900
{Subject} [ruby-list:21371] Re: 引数コピーとオブジェクト指向
{Message ID} <38CC7210.235AD034@sitc.toshiba.co.jp>
Matsuo Hisanori <hisanori@sitc.toshiba.co.jp> wrote...

TADA Tadashi wrote:
TADA>  で、sectionに関して言えば、私ならsectionをStringで表現すること
TADA> などせず、ちゃんとSectionクラスを作って名前の変更を管理させます

Matsuo> すみません、僕の書き方が悪いのか、読み違えておられます。Sectionクラスを別に
Matsuo> ちゃんと作っている、という前提です。

うーん、Sectionが独立したクラスだと、多分わたしはdupしないと思います。
そもそもdupしても本当に独立した二つのオブジェクトに分かれるかどうかも
怪しいような。自分でそうなるように作ってあれば別ですけど。
複製されたオブジェクトのインスタンス変数が同じ文字列や配列などを
参照していたら、ほとんど意味がないですよね。

思い返してみると、文字列以外のオブジェクトはまったくdupしたことが
ないです。思うに、文字列はかなり特殊なのではないかという気がします。
Rubyでは基本的なデータとして、いたるところで文字列が生成・参照されて
いるので、限定された状況でなければ全ての参照先を把握するのが難しいし、
それにただのバイト列だから簡単にコピーできるので、必要に応じてdupを
呼んでいるみたいです、わたしの場合。

他のオブジェクトでは、例えば数や正規表現はそもそもオブジェクト
そのものを変更できないし、配列やハッシュは複製できても中身までは
複製しませんから。

--------------------------------------------------
土岐 仁謙    神戸大学物理高エネ研 M2
http://www.freedom.ne.jp/toki/

In This Thread