From: Yehuda Katz Date: 2009-09-01T01:31:21+09:00 Subject: [ruby-core:25224] Re: Module#prepend and Array#prepend --000feaf0b19a1d7fe40472729039 Content-Type: text/plain; charset=ISO-8859-1 On Mon, Aug 31, 2009 at 4:09 AM, David A. Black 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. > > > 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 --000feaf0b19a1d7fe40472729039 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable

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:
=A0 =A0 =A0Yehuda Katz wrote:
=A0 =A0 =A0 =A0 =A0 =A0class Person
=A0 =A0 =A0 =A0 =A0 =A0=A0prepend Exclaimer
=A0 =A0 =A0 =A0 =A0 =A0end


Is there some way to make the relationship more visually obvious?

class Person > Exclaimer
end

class Person
=A0self >> Exclaimer
end


Hmmm... seems potentially=A0a bit=A0visually 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<= br> 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.

=A0module M
=A0 =A0def x
=A0 =A0end
=A0end

=A0class C
=A0 =A0def x
=A0 =A0end

=A0 =A0include M =A0 =A0 =A0 # doesn't affect instances
=A0 =A0include! M =A0 =A0 =A0# blocks this class's same-named methods<= br> =A0end

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.
=A0


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
Develope= r | Engine Yard
(ph) 718.877.1325
--000feaf0b19a1d7fe40472729039--