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
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).
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
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
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.
>> 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