Minimalist Classes

Dmitry Soshnikov dmitry.soshnikov at gmail.com
Tue Nov 1 12:34:37 PDT 2011


On 01.11.2011 22:21, Axel Rauschmayer wrote:
>> Can you show an example (and also the same example which is solved by 
>> es-proposed super-calls)? 
>
> let A = {
>     describe() {
>         return "A";
>     }
> }
> let B = A <| {
>     describe() {
>         return "B"+super.describe();
>     }
> }
> let C = B <| {
>     describe() {
>         return "C"+super.describe();
>     }
> }
> let obj = C <| {};
>
> Invocation: B.describe.call(obj) should return "BA". With your library 
> I would expect it to return "BBA".
>

Yes, obviously (and unfortunately). Thanks, it's a good catch.

Though, that's said, this lib was initially designed specially for 
class-system (and works in most of cases well); not for class-free 
super-calls. Yes, there are some subtle cases which aren't solve.

> Furthermore, I don’t think your approach would work here:
>
> let A = {
>     one() {
>         return this.two();
>     }
>     two() {
>         return "a";
>     }
> }
> let B = A <| {
>     one() {
>         return "B"+super.one();
>     }
>     two() {
>         return "b"+super.two();
>     }
> }
> let C = B <| {
>     one() {
>         return "C"+super.one();
>     }
>     one() {
>         return "b"+super.two();
>     }
> }
> let obj = C <| {};
>
> Would obj.one() work? As far as I can tell, your bookkeeping works for 
> one super recursion only, not for two.
>

Well, it works at least in respect of that it doesn't go to i-loop and 
doesn't break; the result is though "CBca", which seems isn't what you 
expect. Thanks for this example as well.

Dmitry.



More information about the es-discuss mailing list