Hi, Stevan Little wrote: > So, onto my question, I am wondering what are the valid scopes for > $?SELF and $?CLASS. > > Are these (magical) globals who only have bound values in certain > contexts? If that is so, what value do they have outside of a valid > context? undef? or is attempting to accessing the value a runtime > exception?
hm, I've thought of these as follows: class Foo {...} # is really class Foo { my $?CLASS := Foo; ...; } method bar($self:) {...} # is really method bar($self:) { my $?SELF := $self; ...; } > The obvious one is that they are both valid within a method. I asumme > that $?SELF is bound to the invocant, and $?CLASS is bound to the > class the method was defined within. It seems to me that this also > mean that in a class method, that $?SELF == $?CLASS? I think so, too. > Also (IIRC) we discussed $?CLASS being valid inside a class Foo { ... > } block at the hackathon. Would mean that something like this should > be possible. > > class FooLoggerProxy is Foo { > has Logger $.logger; > for ($?CLASS.meta.superclasses()) -> $super { > for ($super.meta.getmethods()) -> $method { > $?CLASS.meta.add_method($method.label => method { > $?SELF.logger.log($method.label ~ " has been > called"); return $method.do([EMAIL PROTECTED]) > }); > } > } > } I'd opt for yes. > I am not sure if there are any other valid contexts other than inside > a method or a class composition block. At least none that I can think > of. role, submethod? --Ingo -- Linux, the choice of a GNU | Mathematicians practice absolute freedom. generation on a dual AMD | -- Henry Adams Athlon! |