![]() |
|
||||
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
|||||
| Related Syntax | Related Concepts | |
| operator |
cast
|
|
Syntax
record-type-name cast record-expression
You can use cast to force a record of an extended type that is resident on a shelf of its base type to be treated as its own type rather than the base type.
One example of when this is useful is when you call a dynamically overloaded function and then want to access fields in the record returned by that function. You know what type the result is, based on the type you passed to it, but OmniMark still treats it as a record of the base type. Here is an example:
declare record point
field integer x
field integer y
declare record pixel
extends point
field stream color
define dynamic point function move-point
value point a
to value point b
as
local point c
set c:x to b:x
set c:y to b:y
return c
define overriding point function move-point
value pixel a
to value point b
as
local pixel c
set c:x to b:x
set c:y to b:y
return c
process
local point a variable
local pixel b
local point c
set b:x to 5
set b:y to 78
set b:color to "red"
set c:x to 87
set c:y to 56
output (pixel cast move-point b to c):color
|
Related Syntax declare record define overloaded function, dynamic, overridding do select-type |
Related Concepts Records, extended |