Empty Arrays of Instances: How?
To cater for the need to handle empty arrays of Instances as easily as non-empty arrays, a reference to an empty array of Class Instances is handled in a special way.
Whenever a reference or an assignment is made to the content of an empty array of Instances, the following steps are performed:
- APL creates a new Instance of the same Class of which the empty Instance belongs
- the default (niladic) Constructor is run in the new Instance
- the appropriate value is obtained or assigned:- if it is a reference is to a Field, the value of the Field is obtained
- if it is a reference is to a Property, the PropertyGet function is run
- if it is a reference is to a Method, the method is executed
-
if it is an assignment, the assignment is performed or the PropertySet function is run
-
if it is a reference, the result of step 3 is used to generate an empty result array with a suitable prototype by the application of the function
{0⍴⊂⍵}
to it - the Class Destructor (if any) is run in the new Instance
- the New Instance is deleted
Example
:Class Bird
:Field Public Species
∇ egg spec
:Access Public Instance
:Implements Constructor
⎕DF Species←spec
∇
∇ default
:Access Public Instance
:Implements Constructor
⎕DF Species←'Default Bird'
#.DISPLAY Species
∇
∇ R←Speak
:Access Public
#.DISPLAY R←'Tweet, Tweet, Tweet'
∇
:EndClass ⍝ Bird
First, we can create an empty array of Instances of Bird using 0⍴
.
Empty←0⍴⎕NEW Bird 'Robin'
A reference to Empty.Species
causes APL to create a new Instance and invoke the niladic Constructor default
. This function sets Species
to 'Default Bird'
and calls #.DISPLAY
which displays output to the Session.
DISPLAY Empty.Species
.→-----------.
|Default Bird|
'------------'
APL then retrieves the value of Species
('Default Bird'
), applies the function {0⍴⊂⍵}
to it and returns this as the result of the expression.
.⊖---------------.
| .→-----------. |
| | | |
| '------------' |
'∊---------------'
A reference to Empty.Speak
causes APL to create a new Instance and invoke the niladic Constructor default
. This function sets Species
to 'Default Bird'
and calls #.DISPLAY
which displays output to the Session.
DISPLAY Empty.Speak
.→-----------.
|Default Bird|
'------------'
APL then invokes function Speak
which displays 'Tweet, Tweet, Tweet'
and returns this as the result of the function.
.→------------------.
|Tweet, Tweet, Tweet|
'-------------------'
APL then applies the function {0⍴⊂⍵}
to it and returns this as the result of the expression.
.⊖----------------------.
| .→------------------. |
| | | |
| '-------------------' |
'∊----------------------'