On Tue, Sep 1, 2009 at 5:37 PM, David A. Black <dblack / rubypal.com> wrote:

> Hi --
>
>
> On Tue, 1 Sep 2009, Yehuda Katz wrote:
>
>
>>
>> On Mon, Aug 31, 2009 at 4:09 AM, David A. Black <dblack / rubypal.com>
>> wrote:
>>      Hi --
>>
>>      On Mon, 31 Aug 2009, Yehuda Katz wrote:
>>
>>
>>
>>            On Sun, Aug 30, 2009 at 10:09 PM, Joel VanderWerf
>>            <vjoel / path.berkeley.edu>
>>            wrote:
>>                 Yehuda Katz wrote:
>>                       class Person
>>                        prepend Exclaimer
>>                       end
>>
>>
>>            Is there some way to make the relationship more
>>            visually obvious?
>>
>>            class Person > Exclaimer
>>            end
>>
>>            class Person
>>             self >> Exclaimer
>>            end
>>
>>
>>            Hmmm... seems potentially a bit visually confusing.
>>            I'm happy with prepend,
>>            in particular if we also make prepend a method on
>>            Array.
>>
>>
>> I like the idea of the reverse #include but I'm not sure about the
>> name. The problem, for me, is that it's *too* array-like. The other
>> related operations don't have that same spatial/collection feel to
>> them. Somehow prepend doesn't sound like it's in the same semantic
>> space as include.
>>
>> Now I'm supposed to pony up a brilliant alternative :-) include! came
>> to mind. The "dangerous" aspect is that it occludes the current
>> version of the method.
>>
>>  module M
>>    def x
>>    end
>>  end
>>
>>  class C
>>    def x
>>    end
>>
>>    include M       # doesn't affect instances
>>    include! M      # blocks this class's same-named methods
>>  end
>>
>> Mind you, I've always been intrigued by the idea of ancestors being
>> a fully read-write array. But the current semantics of include are not
>> very array-like, so I'm not sure about "prepend".
>>
>>
>> We asked Matz about that, and he felt it was a bit *too* much. One major
>> problem is that it would affect classes and not just modules, with more
>> dubious semantics.
>>
>
> True.
>
> One question about the prepend idea:
>
>  module M
>    def x; "M's x"; end
>  end
>
>  module N
>    def x; "N's x"; end
>    prepend M   # or whatever it's called :-)
>  end
>
>  class C
>    include N
>  end
>
> Would N have sacrificed itself, so to speak, to M, so that:
>
>  C.new.x
>
> would print "M's x"?


Yep. But keep in mind that M could call super, which would go to N's x.

-- Yehuda


>
>
>
> David
>
> --
> David A. Black / Ruby Power and Light, LLC / http://www.rubypal.com
> Ruby/Rails training, mentoring, consulting, code-review
> Latest book: The Well-Grounded Rubyist (http://www.manning.com/black2)
>
> September Ruby training in NJ has been POSTPONED. Details to follow.
>



-- 
Yehuda Katz
Developer | Engine Yard
(ph) 718.877.1325