[chuck-users] Inheritance and Arrays

Casper Schipper casper.schipper at gmail.com
Sat Jan 3 09:55:49 EST 2015


You could try assign subclass instances to arrays of it's parent class, as shown in the snippet bellow.
It is not a very elegant syntax, but at least it makes your plus(A arg[]) function work like you would expect.

best,
Casper

class A {
    42 => int a;
    
    fun void print() {
        <<<a>>>;
    }
}

class B extends A {
    101 => int b;
    
    fun void print() {
        <<<b>>>;
    }
}

fun void plus(A arg[]) {
    for (0 => int i; i <  arg.size()     ; i++) {
        arg[i].a ++;
        arg[i].print();
    }
    
}

// first declare the 'container'.
A @ foo[2];

// use new operator to create B instances.
(new B) @=> foo[0];
(new B) @=> foo[1];

1 => foo[0].a;
2 => foo[1].a;


plus(foo);
// notice, foo[0] & foo[1] still behave like a B instance.
<<<"foo[0].a", foo[0].a>>>;
<<<"foo[1].a", foo[1].a>>>;


> 
>   1. Inheritance and Arrays (Julien Saint-Martin)
> 
> From: Julien Saint-Martin <julien.saintmartin at googlemail.com>
> To: chuck-users at lists.cs.princeton.edu
> Date: 2 januari 2015 16:15:54 CET
> Reply-To: ChucK Users Mailing List <chuck-users at lists.cs.princeton.edu>
> Subject: [chuck-users] Inheritance and Arrays
> 
> 
> Hi!
> 
> I would like to pass arrays of objects to a function taking an array of parent class as argument.
> I try different things but unfortunately I have compilation errors each time.
> 
> The following example works with no array:
> 
> class A {
>        int a;
> }
> 
> class B extends A {
> int b;
> }
> 
> fun void plus(A arg) {
>        arg.a ++;
> }
> 
> B foo;
> 
> 1 => foo.a;
> plus (foo);
> <<<"foo.a", foo.a>>>;
> 
> 
> 
> 
> But When I try the same with arrays it doesn't compile:
> [l13.ck]:line(22): argument type(s) do not match:
> [l13.ck]:line(22): ... for function 'plus(...)' ...
> [l13.ck]:line(22): ...(please check the argument types)
> 
> class A {
>        int a;
> }
> 
> class B extends A {
> int b;
> }
> 
> fun void plus(A arg[]) {
>        for (0 => int i; i <  arg.size()     ; i++) {
>        arg[i].a ++;
>        }
> 
> }
> 
> B foo[2];
> 
> 1 => foo[0].a;
> 2 => foo[1].a;
> plus (foo);
> <<<"foo[0].a", foo[0].a>>>;
> <<<"foo[1].a", foo[1].a>>>;
> 
> 
> Any idea ?
> 
> Thanks in advance and Happy new year!!
> 
> Julien
> 
> 
> 
> 
> _______________________________________________
> chuck-users mailing list
> chuck-users at lists.cs.princeton.edu
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cs.princeton.edu/pipermail/chuck-users/attachments/20150103/8e08710d/attachment.html>


More information about the chuck-users mailing list