[#5219] Segmentation fault in timeout.rb — Michel Pastor <K@...>

Hi,

18 messages 2005/06/16
[#5220] Re: Segmentation fault in timeout.rb — Eric Hodel <drbrain@...7.net> 2005/06/16

[#5221] Re: Segmentation fault in timeout.rb — Michel Pastor <K@...> 2005/06/16

On Fri, 17 Jun 2005 05:03:18 +0900

[#5223] Re: Segmentation fault in timeout.rb — nobu.nokada@... 2005/06/17

Hi,

[#5296] Subversion — Shugo Maeda <shugo@...>

Hi,

64 messages 2005/06/30
[#5297] Re: Subversion — Curt Hibbs <curt@...> 2005/06/30

Shugo Maeda wrote:

[#5298] Re: Subversion — Nikolai Weibull <mailing-lists.ruby-core@...> 2005/06/30

Curt Hibbs wrote:

[#5301] Re: Subversion — Austin Ziegler <halostatue@...> 2005/06/30

On 6/30/05, Nikolai Weibull

[#5304] Re: Subversion — Nikolai Weibull <mailing-lists.ruby-core@...> 2005/06/30

Austin Ziegler wrote:

[#5305] Re: Subversion — Austin Ziegler <halostatue@...> 2005/06/30

On 6/30/05, Nikolai Weibull

[#5307] Re: Subversion — mathew <meta@...> 2005/06/30

Austin Ziegler wrote:

[#5308] Re: Subversion — Austin Ziegler <halostatue@...> 2005/06/30

On 6/30/05, mathew <meta@pobox.com> wrote:

[#5311] Re: Subversion — mathew <meta@...> 2005/07/01

Austin Ziegler wrote:

[#5323] Re: Subversion — Austin Ziegler <halostatue@...> 2005/07/01

On 7/1/05, mathew <meta@pobox.com> wrote:

[#5325] Re: Subversion — Nikolai Weibull <mailing-lists.ruby-core@...> 2005/07/01

Austin Ziegler wrote:

Re: Extending a SimpleDelegator

From: Yukihiro Matsumoto <matz@...>
Date: 2005-06-12 18:25:45 UTC
List: ruby-core #5199
Hi,

In message "Re: Extending a SimpleDelegator"
    on Mon, 25 Apr 2005 23:39:35 +0900, TRANS <transfire@gmail.com> writes:

|I noticed that Delegator (delegate.rb) does not work as one might
|expect when extending the delegator.
|  require 'delegate'
|
|  M = Module.new {
|    def bracket ; p "come on" ; end
|  }
|
|  class SD < SimpleDelegator
|    def initialize( obj )
|      super( obj )
|      extend M
|    end
|  end
|
|  class C
|    def bracket ;  p "hello" ;  end
|  end
|
|  c = C.new
|  sd = SD.new(c)
|  sd.bracket
|
|This produces "hello" and not "come on".

SimpleDelegator creates an object that delegates every method of the
target object (via singleton methods).  And "extend" adds hidden super
class between self and its class.  Thus this is expected behavior, IMO.

I suggest you to use DelegateClass() for the purpose.  This is much
more efficient.

  require 'delegate'

  class C
    def bracket ;  p "hello" ;  end
  end

  M = Module.new {
    def bracket ; p "come on" ; end
  }

  class SD < DelegateClass(C)
    def initialize(obj)
      super(obj)
      extend M
    end
  end

  c = C.new
  sd = SD.new(c)
  sd.bracket

							matz.

In This Thread