To jest ciągłe pytanie z poprzedniego Why is Perl 6's unwrap method a method of Routine?, ale w większości niepowiązanych.Dlaczego nie mogę wywoływać metod meta w Routine :: WrapHandle?
Sposób wrap
jest udokumentowana powrotu „wystąpienie prywatnej klasy zwanej WrapHandle Poza tym, że jest dziwny wyciek klasę, która jest prywatna, to nie jest faktycznie nazwa rzeczą, która przychodzi z powrotem Klasa jest faktycznie Routine::WrapHandle
..: .
$ perl6
> sub f() { say 'f was called' }
sub f() { #`(Sub|140397740886648) ... }
> my $wrap-handle = &f.wrap({ say 'before'; callsame; say 'after' });
Routine::WrapHandle.new
Ale oto jest pytanie chciałem zadzwonić .^methods
na Routine::WrapHandle
to nie działa.
> Routine::WrapHandle.^methods
Could not find symbol '&WrapHandle'
in block <unit> at <unknown file> line 1
to jest taka sama jak próbuje go na nieokreślonej c Nazwa lass:
> Foo::Baz.^methods
Could not find symbol '&Baz'
in block <unit> at <unknown file> line 1
mogę nazwać meta metod na przykład mimo:
> $wrap-handle.^methods
(restore)
> $wrap-handle.^name
Routine::WrapHandle
Co się tam dzieje?
To [leksykalna klasa] (https://github.com/rakudo/rakudo/search?&q=WrapHandle&type=) –