[#24536] 「Rubyの落し方」 v.s. ruby_1_8 — akira yamada / やまだあきら <akira@...>

<URL:http://jp.rubyist.net/magazine/?0002-RubyCore>

40 messages 2004/10/20
[#24541] Re: 「Rubyの落し方」 v.s. ruby_1_8 — Yukihiro Matsumoto <matz@...> 2004/10/20

まつもと ゆきひろです

[#24599] 1.8.2 preview3? — akira yamada / やまだあきら <akira@...> 2004/10/26

2004-10-20 (水) の 21:38 +0900 に Yukihiro Matsumoto さんは書きました:

[#24605] Re: 1.8.2 preview3? — akira yamada / やまだあきら <akira@...> 2004/10/27

2004-10-26 (火) の 16:16 +0900 に akira yamada / やまだあきら さんは書きました:

[#24606] Re: 1.8.2 preview3? — Yukihiro Matsumoto <matz@...> 2004/10/27

まつもと ゆきひろです

[#24608] Re: 1.8.2 preview3? — akira yamada / やまだあきら <akira@...> 2004/10/27

2004-10-27 (水) の 11:48 +0900 に Yukihiro Matsumoto さんは書きました:

[#24620] Re: 1.8.2 preview3? — akira yamada / やまだあきら <akira@...> 2004/10/27

2004-10-27 (水) の 12:42 +0900 に akira yamada / やまだあきら さんは書きました:

[#24629] Re: 1.8.2 preview3? — Tanaka Akira <akr@...17n.org> 2004/10/29

In article <1098888819.9446.14.camel@rice.p.arika.org>,

[ruby-dev:24465] Re: DelegateClass(superclass)#clone

From: pegacorn@...
Date: 2004-10-11 07:09:02 UTC
List: ruby-dev #24465
 From: pegacorn@jcom.home.ne.jp
 Date: Mon, 11 Oct 2004 10:39:08 +0900
 Message-Id: <20041011.103446.59461857.pegacorn@jcom.home.ne.jp>
/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> DelegateClass を継承したクラスの clone は、
  ^^^^^^^^^^^^^
  DelegateClass(superclass)の間違いですね。

> 以下のようになるべきだと思うのですが、
> いかがでしょうか?
> # delegate.rb をどう修正して良いかはわからないのですが…

一応自分なりに delegate.rb を修正してみました。
これで、先のテストケースはうまくいきます。
# なぜ、元の delegate.rb で、DelegateClass(superclass) を継承した
# クラスが __getobj__ にアクセスできていたのか理解できていませんが…


--- delegate.rb.ORG	Tue Dec 16 07:33:25 2003
+++ delegate.rb	Mon Oct 11 07:02:40 2004
@@ -107,9 +107,27 @@
       raise NameError, "invalid identifier %s" % method, caller(3)
     end
   end
+  klass.module_eval <<-EOS
   def __getobj__
     @_dc_obj
   end
+  def __setobj__(obj)
+    @_dc_obj = obj
+  end
+  protected :__getobj__, :__setobj__
+  alias _org_clone clone
+  def clone
+    clone_obj = self._org_clone
+    clone_obj.__setobj__(@_dc_obj.clone)
+    clone_obj
+  end
+  alias _org_dup dup
+  def dup
+    dup_obj = self._org_dup
+    dup_obj.__setobj__(@_dc_obj.dup)
+    dup_obj
+  end
+  EOS
   return klass;
 end


----
馬越

In This Thread