Thread overview | |||||
---|---|---|---|---|---|
|
May 18, 2004 wrong mixin function being called | ||||
---|---|---|---|---|
| ||||
So here is the code: <CODE> import std.c.stdio; template Tocka() { int x=2,y=7; void print(){printf("x = %d y = %d\n",x,y);} } class Line { mixin Tocka T1; mixin Tocka T2; void play() { T1.print(); T2.print(); printf("\n"); T1.x = 100; T1.y = 50; T2.x = 25; T2.y = 5; T1.print(); T2.print(); } } int main(char[][] args) { Line T = new Line(); T.play(); getch(); return 1; } </CODE> this program prints: x = 25 y = 5 x = 25 y = 5 instead of the expected if every mixin has its own scope: x = 100 y = 50 x = 25 y = 5 |
May 18, 2004 Re: wrong mixin function being called | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ivan Senji | This works as expected if you name the function something other than 'print'. The trouble is, both T1.print and T2.print override Object.print, and an error should be diagnosed. "Ivan Senji" <ivan.senji@public.srce.hr> wrote in message news:c8cdfk$2neh$1@digitaldaemon.com... > So here is the code: > > <CODE> > import std.c.stdio; > > template Tocka() > { > int x=2,y=7; > void print(){printf("x = %d y = %d\n",x,y);} > } > > class Line > { > mixin Tocka T1; > mixin Tocka T2; > > void play() > { > T1.print(); > T2.print(); > printf("\n"); > T1.x = 100; > T1.y = 50; > T2.x = 25; > T2.y = 5; > T1.print(); > T2.print(); > } > } > > int main(char[][] args) > { > Line T = new Line(); > T.play(); > > getch(); > return 1; > } > </CODE> > > this program prints: > x = 25 y = 5 > x = 25 y = 5 > > instead of the expected if every mixin has its own scope: > x = 100 y = 50 > x = 25 y = 5 > > > > > |
May 21, 2004 Re: wrong mixin function being called | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter | "Walter" <newshound@digitalmars.com> wrote in message news:c8cfs9$2rks$1@digitaldaemon.com... > This works as expected if you name the function something other than 'print'. The trouble is, both T1.print and T2.print override Object.print, and an error should be diagnosed. Now (in 0.90) error is being diagnosed but it is a bit misleading. The error points to the line where the template (that is used as a mixin) appears and not at the code where it is mixed in. This shouldn't be reported as an error in a mixin, but better in the place where it is used. > "Ivan Senji" <ivan.senji@public.srce.hr> wrote in message news:c8cdfk$2neh$1@digitaldaemon.com... > > So here is the code: > > > > <CODE> > > import std.c.stdio; > > > > template Tocka() > > { > > int x=2,y=7; > > void print(){printf("x = %d y = %d\n",x,y);} > > } > > > > class Line > > { > > mixin Tocka T1; > > mixin Tocka T2; > > > > void play() > > { > > T1.print(); > > T2.print(); > > printf("\n"); > > T1.x = 100; > > T1.y = 50; > > T2.x = 25; > > T2.y = 5; > > T1.print(); > > T2.print(); > > } > > } > > > > int main(char[][] args) > > { > > Line T = new Line(); > > T.play(); > > > > getch(); > > return 1; > > } > > </CODE> > > > > this program prints: > > x = 25 y = 5 > > x = 25 y = 5 > > > > instead of the expected if every mixin has its own scope: > > x = 100 y = 50 > > x = 25 y = 5 > > > > > > > > > > > > |
Copyright © 1999-2021 by the D Language Foundation