[#10007] Re: [ruby-talk:03267] Re: mod_ruby error? — Wakou Aoyama <wakou@...>

青山です。

31 messages 2000/06/11
[#10008] Re: [ruby-talk:03267] Re: mod_ruby error? — Wakou Aoyama <wakou@...> 2000/06/11

青山です。

[#10018] Re: [ruby-talk:03267] Re: mod_ruby error? — Shugo Maeda <shugo@...> 2000/06/13

前田です。

[#10027] Re: [ruby-talk:03267] Re: mod_ruby error? — Wakou Aoyama <wakou@...> 2000/06/13

青山です。

[#10028] Re: [ruby-talk:03267] Re: mod_ruby error? — Wakou Aoyama <wakou@...> 2000/06/13

青山です。

[#10029] Re: [ruby-talk:03267] Re: mod_ruby error? — Shugo Maeda <shugo@...> 2000/06/13

前田です。

[#10035] Re: [ruby-talk:03267] Re: mod_ruby error? — Wakou Aoyama <wakou@...> 2000/06/13

青山です。

[#10038] Re: [ruby-talk:03267] Re: mod_ruby error? — Shugo Maeda <shugo@...> 2000/06/14

前田です。

[#10041] Re: [ruby-talk:03267] Re: mod_ruby error? — Wakou Aoyama <wakou@...> 2000/06/14

青山です。

[#10045] Re: [ruby-talk:03267] Re: mod_ruby error? — Wakou Aoyama <wakou@...> 2000/06/14

青山です。

[#10046] Re: [ruby-talk:03267] Re: mod_ruby error? — Wakou Aoyama <wakou@...> 2000/06/14

青山です。

[#10047] Re: [ruby-talk:03267] Re: mod_ruby error? — Wakou Aoyama <wakou@...> 2000/06/14

青山です。

[#10048] Re: [ruby-talk:03267] Re: mod_ruby error? — Wakou Aoyama <wakou@...> 2000/06/14

青山です。

[#10135] don't use mktemp() — Shugo Maeda <shugo@...>

前田です。

35 messages 2000/06/27
[#10136] Re: don't use mktemp() — matz@... (Yukihiro Matsumoto) 2000/06/27

まつもと ゆきひろです

[#10137] Re: don't use mktemp() — Shugo Maeda <shugo@...> 2000/06/27

前田です。

[#10141] Re: don't use mktemp() — kjana@... (YANAGAWA Kazuhisa) 2000/06/27

In message <874s6f1rqj.wl@studly.netlab.co.jp>

[#10143] Re: don't use mktemp() — WATANABE Hirofumi <eban@...> 2000/06/27

わたなべです.

[#10181] Re: don't use mktemp() — Katsuyuki Komatsu <komatsu@...> 2000/07/03

小松です。

[#10183] Re: don't use mktemp() — WATANABE Hirofumi <eban@...> 2000/07/03

わたなべです.

[ruby-dev:10097] Re: [PATCH] module === string.extend(module).dup

From: nobu.nakada@...
Date: 2000-06-20 23:02:08 UTC
List: ruby-dev #10097
なかだです。

At Wed, 21 Jun 2000 02:11:51 +0900,
matz@netlab.co.jp (Yukihiro Matsumoto) wrote:
> |> そういう時にはdupでなくcloneを使うもんだと想定してるんですが。
> |> dupは同内容の文字列オブジェクトを作るメソッドで、cloneは
> |> (extendなども含めて)コピーを作るメソッドです。
> |
> |  extend してるけど freeze はしてないコピー、ってのが欲しかった
> |んですが、帯に短したすきに長しで。
> 
> むむむ。良く考えてみるとこれはなかなかに問題です。というのも
> 
>   clone 状態や特異メソッドも含めて元オブジェクトの完全な複製
>   dup   オブジェクトの内容のみのコピー。状態は複製しない
> 
> というのが、私の意図していたcloneとdupの挙動なのです。freeze
> も特異メソッドも私の分類ではどちらも状態ですから、どちらかだ
> けをコピーと言うのは考えてませんでした。

  なるほど。たしかに、こっちは欲しいけどあっちはいらない、とい
うのもヘンなのかもしれません。

> しかし、実際の挙動は
> 
> |  他のオブジェクトは dup でも extend されるもんで、String もし
> |てもいいかなと。
> 
> になっているわけです(具体的にはObjectとArrayとHash)。しかも、
> これはcloneと違って、複製後に元のオブジェクトに特異メソッド
> を追加すると自動的にdupされたオブジェクトにも追加されるとい
> うオマケ付き。

  これには気づきませんでしたが、T_ICLASS を共有してるせいですか。

> はっきり言うと、これは私の意図ではなくバグです。特異メソッド
> はあるオブジェクト固有のメソッドですから、複数のオブジェクト
> から共有されてはマズイです。
> 
> ちゅーことで、他のオブジェクトでもdupではextendされないこと
> にすべきだと思いますし、そのように修正しようと思います。なん
> だか中田さんの希望とは反対方向ですね。

  いや、どっちかに揃ってればいーです。

> でもって、dupでは複製されないが、cloneでは複製されるいくつか
> 「状態」について、これは複製したいがこれは複製したくないとい
> う中田さんのような希望をどのようにかなえるべきかについては、
> それはそれで別に議論したいです。

  こういうのだと、frozen なオブジェクトじゃダメでした。
Kernel#included_modules とか extended_modules とかいうのがあれば、うま
く行きそうなんですが。

module Duplicator
  def included_modules
    class << self; included_modules end
  end

  def duplicate
    n = self.dup
    included_modules.each {|m| n.extend(m)}
    n
  end
end

x = "xyz".extend(Duplicator)
y = x.duplicate
z = y.duplicate

-- 
そうだ 強気に ちょっと インチキに☆彡
    中田 "Bugるくらいがちょうどいいかも;-)" 伸悦

In This Thread