OO magic (at least for me)
Hi, I'm wondering, if it's possible with Perl 6 or not? class MyClass { method mymethod($par) { say mymethod called!; } } class ExClass is MyClass { mymethod(12); } # pugs myprog mymethod called! I would like to use mymethod to add ExClass some methods, etc. /// Just another problem, related to the above: class MyClass { method whenmother() { say MyClass is parent now!!!; say Her child name is: ~ ; } } class Child is MyClass { } # pugs myprog MyClass is parent now!!! Her child name is: Child Bye, Andras
Re: OO magic (at least for me)
BÁRTHÁZI András [EMAIL PROTECTED] writes: Hi, I'm wondering, if it's possible with Perl 6 or not? class MyClass { method mymethod($par) { say mymethod called!; } } class ExClass is MyClass { mymethod(12); } # pugs myprog mymethod called! I would like to use mymethod to add ExClass some methods, etc. /// Just another problem, related to the above: class MyClass { method whenmother() { say MyClass is parent now!!!; say Her child name is: ~ ; } } class Child is MyClass { } # pugs myprog MyClass is parent now!!! Her child name is: Child I'd like to hope so. Actually, I don't think that this *specific* functionality should be in the core, but the ability to implement it (just needs a unified notifcation scheme that gets tickled when new classes, methods, subs, packages, etc, get added to the image -- more detailed behaviour is a SMOP).
Re: OO magic (at least for me)
Hi! I'm trying to answering my questions. Still interested in some official answer. :) --- 8 --- 8 --- 8 --- 8 --- 8 --- 8 --- 8 --- class MyMethod { method fun1() { fun2(); } method fun2() { say fun2!; } } class Child is MyMethod { } Child.fun1(); --- 8 --- 8 --- 8 --- 8 --- 8 --- 8 --- 8 --- *** No compatible subroutine found: fun2 I'm wondering why, but maybe, it's OK. --- 8 --- 8 --- 8 --- 8 --- 8 --- 8 --- 8 --- class MyMethod { method fun1() { fun2(); } sub fun2() { say fun2!; } } class Child is MyMethod { } Child.fun1(); --- 8 --- 8 --- 8 --- 8 --- 8 --- 8 --- 8 --- fun2! Sounds good. It seems to me, that I can call fun2() from inside MyMethod, from everywhere. OK, Child is MyMethod, so can I do it there too? No. :( --- 8 --- 8 --- 8 --- 8 --- 8 --- 8 --- 8 --- class MyMethod { method fun1() { fun2(); } sub fun2() { say fun2!; } } class Child is MyMethod { fun2(); } Child.fun1(); --- 8 --- 8 --- 8 --- 8 --- 8 --- 8 --- 8 --- *** No compatible subroutine found: fun2 The problem is calling fun2() from Child's declaration. As I think, the calling just happens at when interpreting the declaration of Child, but the scope is not Child's scope. Why? Let's try Child.fun2()! --- 8 --- 8 --- 8 --- 8 --- 8 --- 8 --- 8 --- class MyMethod { method fun1() { fun2(); } sub fun2() { say fun2!; } } class Child is MyMethod { Child.fun2(); } Child.fun1(); --- 8 --- 8 --- 8 --- 8 --- 8 --- 8 --- 8 --- fun2! Works well. Is it a not yet implemented feature in Pugs, or is by design? Still don't know, how can a method/sub automagically called, when I inherite a class. I would like to use the syntax you can see in my example #1, but the syntax of example #2 is still OK. I would like to use calling the classes own methods/subs when declaring a child, and calling a method/sub automatically, when I'm declaring a child. Bye, Andras
Re: OO magic (at least for me)
BÁRTHÁZI András skribis 2005-06-26 19:35 (+0200): method fun1() { fun2(); } method fun2() { say fun2!; } *** No compatible subroutine found: fun2 fun2 is a method, not a sub. You need method syntax to call it: ./fun2; class MyMethod { method fun1() { fun2(); } sub fun2() { say fun2!; } } class Child is MyMethod { } Child.fun1(); Sounds good. It seems to me, that I can call fun2() from inside MyMethod, from everywhere. OK, Child is MyMethod, so can I do it there too? No. :( IIRC, that's what submethods are for. Submethods aren't inherited. It is unclear to me whether subs are. Two requests: 1. Please indent code and don't use cutting lines. 2. Please use visually more different names, fun1 and fun2 look a lot alike. Consider foo and bar. Juerd -- http://convolution.nl/maak_juerd_blij.html http://convolution.nl/make_juerd_happy.html http://convolution.nl/gajigu_juerd_n.html
Re: OO magic (at least for me)
Hi, method fun1() { fun2(); } method fun2() { say fun2!; } *** No compatible subroutine found: fun2 fun2 is a method, not a sub. You need method syntax to call it: ./fun2; Hmm. It really works. :) I'm getting the idea, what's the difference between methods and subs. Anyway, my implementation is, that ./ means self's method - and the class is not an instance, so it has no self. ./fun2 still not working at the second class's declaration. IIRC, that's what submethods are for. Submethods aren't inherited. It is unclear to me whether subs are. Do you mean, that submethods for class methods (I don't know, if is it the official name of the non instance methods)? I don't think so. Bye, Andras
Re: OO magic (at least for me)
BÁRTHÁZI András skribis 2005-06-26 20:07 (+0200): Hmm. It really works. :) I'm getting the idea, what's the difference between methods and subs. Anyway, my implementation is, that ./ means self's method - and the class is not an instance, so it has no self. The invocant can be a class too. Do you mean, that submethods for class methods (I don't know, if is it the official name of the non instance methods)? I don't think so. No. Juerd -- http://convolution.nl/maak_juerd_blij.html http://convolution.nl/make_juerd_happy.html http://convolution.nl/gajigu_juerd_n.html