[#13775] Problems with racc rule definitions — Michael Neumann <neumann@...>

15 messages 2001/04/17
[#13795] Re: Problems with racc rule definitions — Minero Aoki <aamine@...> 2001/04/18

Hi,

[#13940] From Guido, with love... — Dave Thomas <Dave@...>

52 messages 2001/04/20

[#13953] regexp — James Ponder <james@...>

Hi, I'm new to ruby and am coming from a perl background - therefore I

19 messages 2001/04/21

[#14033] Distributed Ruby and heterogeneous networks — harryo@... (Harry Ohlsen)

I wrote my first small distributed application yesterday and it worked

15 messages 2001/04/22

[#14040] RCR: getClassFromString method — ptkwt@...1.aracnet.com (Phil Tomson)

It would be nice to have a function that returns a class type given a

20 messages 2001/04/22

[#14130] Re: Ruby mascot proposal — "Conrad Schneiker" <schneik@...>

Guy N. Hurst wrote:

21 messages 2001/04/24
[#14148] Re: Ruby mascot proposal — Stephen White <spwhite@...> 2001/04/24

On Tue, 24 Apr 2001, Conrad Schneiker wrote:

[#14188] Re: Ruby mascot proposal — matz@... (Yukihiro Matsumoto) 2001/04/25

Hi,

[#14193] Re: Ruby mascot proposal — "W. Kent Starr" <elderburn@...> 2001/04/25

On Tuesday 24 April 2001 23:02, Yukihiro Matsumoto wrote:

[#14138] Re: python on the smalltalk VM — Conrad Schneiker <schneik@...>

FYI: Thought this might be of interest to the JRuby and Ruby/GUI folks.

27 messages 2001/04/24
[#14153] Re: python on the smalltalk VM — Andrew Kuchling <akuchlin@...> 2001/04/24

Conrad Schneiker <schneik@austin.ibm.com> writes:

[#14154] array#flatten! question — Jim Freeze <jim@...> 2001/04/24

Hello.

[#14159] Can I insert into an array — Jim Freeze <jim@...> 2001/04/24

Ok, this may be a dumb question, but, is it possible to insert into an

[#14162] Re: Can I insert into an array — Dave Thomas <Dave@...> 2001/04/24

Jim Freeze <jim@freeze.org> writes:

[#14289] RCR: Array#insert — Shugo Maeda <shugo@...> 2001/04/27

At Wed, 25 Apr 2001 01:28:36 +0900,

[#14221] An or in an if. — Tim Pettman <tjp@...>

Hi there,

18 messages 2001/04/25

[#14267] Re: Ruby mascot proposal — "Conrad Schneiker" <schneik@...>

Danny van Bruggen,

16 messages 2001/04/26

[#14452] How to do it the Ruby-way 3 — Stefan Matthias Aust <sma@3plus4.de>

First a question: Why is

21 messages 2001/04/30

[ruby-talk:13827] Re: Interesting post on slashdot.

From: Mathieu Bouchard <matju@...>
Date: 2001-04-18 22:45:01 UTC
List: ruby-talk #13827
On Wed, 18 Apr 2001, Stephen White wrote:
> > In Ruby, the best you can do is always begin by creating a module you can
> > mixin into later classes. Too bad this is not a common practice yet. Do
> > you know what I do? If I have modules that usually, but doesn't have to
> > "inherit" (include) from eachother, I instead include them all in my class
> 
> Any comments on this style of programming? It sounds like an interesting
> new approach I haven't seen before.

I use a technique I called side-inheritance which I will describe as
follows: calling super from a mixin that has no super-mixin.

You have a mixin you construct only by including mixins A,B in that order.
That's the methods of B on top of the methods of A, such that if super
"falls through" in B, it gets to go through A, although nothing in the
definition of B talks about A.

Here is an example of what you can do, formally described: A provides an
interface that B requires. B provides that interface. This needs not be a
full implementation: if B is empty and requires A, then B provides A. What
is required is that whatever you implement of that interface should still
respect the contract (you will usually call super, save the result, return
the result, and do things before and/or after the result)

This is how I implement run-time checking of contracts. This is "Design by
Contract" without a source filter, without method renaming, and without
AOP (aspect oriented programming). See MetaRuby-0.6.

This is also how MetaRuby-cvs-current has its undo/redo function
implemented uniformly across all of Array/Hash/String. In this case, the
undo/redo module also provides an additional interface, consisting of
#undo() and #redo().

Basically you get to think more about the layering of interfaces in your
layering of superclasses and end up decoupling those in separate modules.

(Ruby's distinction of classes and modules almost becomes a hurdle at some
point. classes are modules, but include works only on non-class modules;
a class is like the zeroth module a class includes, but can't be included 
by a non-class module; etc)

matju

In This Thread

Prev Next