Re: Types for Perl 6: request for comments

[email protected] (yary)
Newsgroups perl.perl6.language
Message-ID <CAG2CFAajO=RW6NssRVmMbT4U_PV=Gv5YduugX1szHMMKe=wSBg@mail.gmail.com>
On Wed, Jul 1, 2015 at 6:03 AM, Giuseppe Castagna <
[email protected]> wrote:

> On 30/06/15 22:30, yary wrote:
>
> Now that I've read ahead to 3.4, the "multi method solution" shown can be
> a little simpler, just need to add "multi" to the original "equal" methods,
> see attached.
>
>  Indeed, nicely seen. However this solution is not modular since it
> requires the modification of an "existing" class. See the paragraph I wrote
> before the excursus in Section 3.3
>

Point taken. I'd still like to employ "don't repeat yourself" and have
ColPoint's multi-method "equal" call Point's method "equal," but I haven't
been able to get this code to work. Perl people, can you debug this example
so that the call to "$a.equal($b)" returns True in some elegant way,
meaning, not explicitly naming "equal" or "Point" in the body of ColPoint's
"multi method equal(Point $p)", nor repeating Point.equal's code either,
nor touching the the Point class in any way?

-y


#!perl6
class Point {
  has $.x is rw;
  has $.y is rw;

  method equal(Point $p) {
    say "In Point.equal";
    ($.x==$p.x)&&($.y==$p.y)
  }
};

class ColPoint is Point {
  has Str $.c is rw;

  multi method equal(ColPoint $p) {
    say "In ColPoint.equal";
    ($.x==$p.x)&&($.y==$p.y)&&($.c eq $p.c)
  }

  multi method equal(Point $p) {
    nextsame; # want this to call Point.equal
  }
};


my Point $a = ColPoint.new(x=>2,y=>21,c=>"white");
my Point $b = Point.new(x=>2,y=>21);
say $a.equal($b); # Should say True
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.