OO magic (at least for me)

2005-06-26 Thread BÁRTHÁZI András

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)

2005-06-26 Thread Piers Cawley
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)

2005-06-26 Thread BÁRTHÁZI András

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)

2005-06-26 Thread Juerd
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)

2005-06-26 Thread BÁRTHÁZI András

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)

2005-06-26 Thread Juerd
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