http://qs1969.pair.com?node_id=1215750


in reply to [Perl6] say variable in Class

Your code is almost valid Perl 6. In order to inspect attribute $!x you have to construct an object instance leading to the two suggestions below. See the Perl 6 Object Orientation document for more.

The first approach is a more usual starting point for development.

class A { has Str $.x ; method test { say 'Test'; say $!x ; } } A.new(x =>'hello').test;

The second approach is more advanced but may be closer to the OP intentions.

class A { has Str $.x ; submethod TWEAK { say 'Test'; say $!x ; } } A.new;
Ron

Replies are listed 'Best First'.
Re^2: say variable in Class
by Edelbaer (Initiate) on Jun 02, 2018 at 18:12 UTC

    Hello Ron,

    thank you for your reply. I think what you mean is that $.x would be accessible in the class as part of a method but not directly. Therefore your first method will work of course but defeats a bit the idea that the object on creation reports its status. The second approach works exactly as it should. And I guess now I need to learn why. So you were absolutely right about the intention :).

    Now I know what to learn, that is real progress!

    Thx a lot!

      but defeats a bit the idea that the object on creation reports its status
      If you want to do that, then you would probably need to create your own constructor with this added feature in it.

      Or, as shown by mr_ron, you might (re)define the TWEAK submethod, which is called by the new default constructor, so that redefining TWEAK effectively modifies the behavior of new.