Darren Duncan darren-at-darrenduncan.net |Perl 6| wrote:
A method is defined within a role or class, as is an attribute. A
private attribute can generally be referenced only by a method
declared in the same role or class as said attribute.
I think that's not right. A private attribute defined in a role becomes
a private attribute of the composed class, so may be referred to from
other roles or the main class definition. In contrast, a "my" variable
inside the role is private to that role's block. Though it is put into
the object's attribute list (the scope is per-instance), it has no name
outside of the block.
A method can reference its own role's/class's private attributes for
any objects of that role/class, regardless of whether said object is
the current method call's invocant or not.
OK, taking "class" only, not "role".
If a role or class is composed into another class or is subclassed, the
(for example) subclass can not reference the private attributes of its
parent class.
As an exception to the above, if a particular class says that it
"trusts" a particular other class (using "trusts Otherclass;" as a
trait), then the trusted class can also reference the privates of the
first class.
OK, trust is not implicit on derived classes. Is that because there is
no rule that says it is, or is there a mention of that somewhere in the
official docs?