Next: Equality, ordering, and hashing
Up: Basic data types and
Previous: Basic data types and
Index
concrete object void;
void is the type of methods that do not return a result. void
is a supertype of all other types. The void object can be returned
explicitly from a method, if necessary.
abstract object any;
any is the supertype of all other non-void types, implicitly.
type none;
The none type is the result type of functions that never return to
their callers, and the type of closure arguments that are never invoked.
none is the subtype of all other types; there is no object of this
type.
type dynamic;
The dynamic type disables static type checking. It's used to explicitly
declare the type of a variable that cannot be statically checked. An
omitted type declaration defaults to dynamic.
In general.cecil:
method ==(l:any, r:any):bool; - object identity test; very low-level, but fast
method !==(l:any, r:any):bool; - not ==
All objects can be compared for identity, using a low-level
implementation-dependent test. Two things that print out the
same may not be ==, e.g. "abc" == "abc" may return false.
By default, operations on collections that compare elements,
such as finding an element in a list or adding an element to a
set, use = (implemented by comparable objects) rather than
==, unless the collection's name includes identity_
.
method print_string(x:any):string; - return a string print version
method print(x:any):void; - print the print_string
method print_line(x:any):void; - print the print_string and a newline
method print_line():void; - just print a newline
Any object can be converted to a string, although the default
version can be low-level and ugly. Most commonly-used objects
override print_string
to return something prettier.
(A two-element version of print permits strings to be printed to
unix_file
s.)
method error(msg:ordered_collection[`T]):none; - quits with an error message; does not return
The error method is the standard way to prematurely quit
execution of a Cecil program.
concrete object not_defined;
The not_defined
object can be used as a dummy object if there
isn't a real one to use, e.g., if you have to have an
uninitialized variable or field or want to reflect whether or not
some value is present. not_defined
is therefore used in places
where a NULL pointer might be used in other languages.
In general, it is poor style to use not_defined
. It is better to
define an application-specific ``absent'' object, integrated into a little
class hierarchy of present or absent data, with appropriate application-
specific behavior attached to the ``absent'' object.
Next: Equality, ordering, and hashing
Up: Basic data types and
Previous: Basic data types and
Index
Cecil/Vortex Project