FWIW theoretically you get at any 'my' symbol in another module through the
compunit interface by getting the CompUnit::Handle and using the '.unit'
method to get the top lexpad of the loaded module.



On Fri, May 19, 2017 at 8:20 AM Zoffix Znet via RT <
perl6-bugs-follo...@perl.org> wrote:

> To the best of my knowledge:
>
> On Thu, 18 May 2017 03:52:42 -0700, elizabeth wrote:
> > Should this work? If not, why not?
>
> No, because the symbol is lexical to the compunit. It's the same as how
> you won't be able
> to access subs or `my` constants or variables, unless you make them `our`
> or export them.
>
> > What would be the way to inherit from lexical classes in other compunits?
>
> One way would be to export them:
>
> ./A.pm6:
> my class A is export {}
>
> ./B.pm6:
> my class B {
>     use A;
>     also is A;
> }
> say B.^mro;
>
> $ ./perl6 -I. -MB -e ''
> ((B) (A) (Any) (Mu))
>
>
> You can also use export sub:
> ./A.pm6:
> sub EXPORT {
>     Map.new: 'A' => my class A {}
> }
>
> Or (I'm unsure what the end goal here is), take a special export arg and
> only export the class if it's present:
>
> ./A.pm6:
> sub EXPORT ($secret-password?) {
>     Map.new: (
>         'A' => my class A {
>         } if $secret-password ~~ 42
>     )
> }
>
> ./B.pm6:
> my class B {
>     use A;
>     also is A;
> }
> say B.^mro;
>
> $ ./perl6 -I. -MB -e ''
> ===SORRY!=== Error while compiling /home/zoffix/CPANPRC/rakudo/B.pm6 (B)
> 'B' cannot inherit from 'A' because it is unknown.
> at /home/zoffix/CPANPRC/rakudo/B.pm6 (B):3
>
>
> Now change ./B.pm6 to:
> my class B {
>     use A 42;
>     also is A;
> }
> say B.^mro;
>
> $ ./perl6 -I. -MB -e ''
> ((B) (A) (Any) (Mu))
>

Reply via email to