Hi,

I've written up the case I found as a test, please feel free to add it if it's useful. All tests pass apart from the last one which tests attribute chaining. Tested on Pugs 6.2.5.

#!/usr/bin/pugs

use v6;
use Test;

plan 7;

#Setup
class Foo {
    has $.bar is rw;
}

my $foo  = Foo.new;
my $foo2 = Foo.new;

#Sanity check
isa_ok($foo,  'Foo');
isa_ok($foo2, 'Foo');

#Setup chain
$foo.bar  = $foo2;
$foo2.bar = 'baz';

#Sanity check part two
is($foo2.bar, 'baz', '... got the right value in $foo2');
is($foo.bar =:= $foo2, 1, '... $foo is storing $foo2');

#Extract last part of chain
my $foo3 = $foo.bar;

#and check its fine
is($foo3 =:= $foo2, 1, '... we can retrieve $foo2 as $foo3');
is($foo3.bar, 'baz', '... got the right value in $foo3');

#Check chaining
lives_ok{
    $foo.bar.bar == 'baz' ;
}, '... attribute chaining is OK';



On 24 May 2005, at 12:52, Adrian Taylor wrote:

Hi,

I have seen similar weirdness and added a couple of tests over the
weekend, whilst simultaneously forgetting to mention it on IRC:

class Foo {
  method noargs () { 42 }
  method callsmethod2 { .noargs(); }
}

 $val = $foo.callsmethod2()

dies. (t/oo/method/instance.t)

It appears to be something to do with whether the methods are declared
with brackets (method callsmethod2 versus method callsmethod2()).

Maybe this is related.

Cheers

Ade

Alex Gutteridge wrote:


Hi,

Just playing around with pugs 6.2.5 OO and couldn't work this out:

class Bowl {
        has $.fish  is rw;
        has $.water is rw;
}
class Fish {
        has $.bowl    is rw;
        has $.eyes    is rw;
}

my $bowl   = Bowl.new;
my $blinky = Fish.new;

$bowl.water  = 'Murky';
$blinky.eyes = 3;

$bowl.fish   = $blinky;
$blinky.bowl = $bowl;

$bowl.water.say;
$blinky.eyes.say;

my $blinkys_bowl = $blinky.bowl;
$blinkys_bowl.water.say;

my $fishy = $bowl.fish;
$fishy.eyes.say;

$bowl.fish.eyes.say;
$blinky.bowl.water.say;

The output I get:

Murky
3
Murky
3
*** No compatible subroutine found: "&eyes"
    at Desktop/testOO.pl line 27, column 1-20

Am I missing something in the syntax when I try to chain the
attribute methods? Or is this not implemented in pugs yet?

Thanks for any help.

Alex Gutteridge

EBI
Wellcome Trust Genome Campus
Hinxton
Cambs CB10 1SD
UK

Tel: 01223 492546
Email: [EMAIL PROTECTED]




Alex Gutteridge

EBI
Wellcome Trust Genome Campus
Hinxton
Cambs CB10 1SD
UK

Tel: 01223 492546
Email: [EMAIL PROTECTED]


Reply via email to