Combining Proto and Parent Inheritance
self
within a method:Rationale: Although the meanings of the two are identical, it is confusing for the reader.
self:Message()
looks very similar to self.slot
. They operate differently because self:Message()
follows parent inheritance, but self.slot
does not. Things that look similar but work differently invariably cause confusion.
self.
when reading from a slot unless you know the slot is in your proto chain.
self.slot
doesn't use parent inheritance, so NewtonScript won't ever find it if it is up there.
self.
when assigning.
self.
, and the slot does not exist in the proto chain, you will end up with a local variable being created instead of a slot. The explicit self.slot
means that slot
will be created in self
whether or not it exists in the proto chain.
self
, also create your slots at compile time and set their values to nil
.
slot
:=
value
(instead of self.slot
:= value
), slot
will be found in the proto chain, and slot
will be created in self
. If you don't create slot
at compile time, slot
won't be found in the proto chain and will be created as a local variable instead.
Although this rule of thumb isn't necessary if you follow the previous rule of thumb (using self.
slot
:=
value
), the two rules are an example of the belt- and-suspenders approach to life. Even if you forget one, the other will keep you from harm.
An online version of Programming for the Newton using Macintosh, 2nd ed. ©1996, 1994, Julie McKeehan and Neil Rhodes.
Last modified: 1 DEC 1996