- Contents
- Lexical variables
- Instance variables
- This variables
- Special variables
- Symbols
- Property variables
Variables
Variables are identifiers prefix and/or suffixed with sigils.
Lexical variables
Lexical variables are identified by the $
sigil.
Lexical variables are specific to the scope in which they are declared. Scopes which inherit from that scope can access them, but exterior scopes cannot.
Lexical variables are implemented as properties of the current scope object.
Inheritance of variables from external scopes is possible through the
same ISA inheritance system used for all objects. For this
reason, $var
is functionally equivalent to *scope.var
.
Tokenized as VAR_LEX
.
Instance variables
Instance variables are identified by the @
sigil.
Instance variables are only valid within class methods. They refer
to properties of the current class instance. For this reason, @var
is
functionally equivalent to *self.var
.
Tokenized as VAR_SELF
.
This variables
Maybe don't use this. I can't decide its fate.
This variables are identified by the %
sigil.
This variables are valid within any function or method. They refer
to properties of the object on which the event was fired. For this reason,
%var
is functionally equivalent to *this.var
.
Often times, *self
and *this
refer to the same object. However, this is not
always the case. Within an on
block, you should always use *this
and %
variables to reference the object on which the event is fired, because *self
will refer to the same *self
as the containing scope.
Tokenized as VAR_THIS
.
Special variables
Special variables are identified by the *
sigil.
Special variables refer to properties of the current scope's special object. All scopes, as well as other select objects, possess a special object. However, such objects cannot be accessed directly; their properties can only be retrieved using this type of variable.
- *scope - refers to the current scope object
- *return - within a function, refers to the return object
- *class - within a class, refers to the class itself
- *self - within a class, refers to the current instance
- *this - within event callback functions, refers to the object on which the event was called
- *argv - refers to the list of arguments passed to the program
- *file - replaced at compile time with the name of the source file
- *line - replaced at compile time with the current line in the source file
Tokenized as VAR_SPEC
.
Symbols
Symbols are identified by the :
sigil.
Symbols are global objects associated with their identifiers. Therefore,
:sym
is always referentially equivalent to to :sym
anywhere else. In other
words, two symbols of the same identifier are memory-address-equivalent,
so :sym === :sym
. Always.
Tokenized as VAR_SYM
.
Property variables
Property variables are defined by the .
sigil.
They are tokenized separately from the normal PROPERTY
. The difference is
that normal properties can never have whitespace between the object and period.
Property variables are only valid within body of an
inside
, type
, or zero-argument
function
. They provide a
shorthand syntax for $obj.property
, allowing it to instead be written as just
.property
.
Tokenized as VAR_PROP
.