|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Встроенная isInitialized функция берет переменную ссылку в качестве своего параметра, и возвращает true, если это когда-либо устанавливалось. Отметьте, что только явные наборы рассматривают, если переменная начинается со значением по умолчанию типа, это не рассматривают, будучи установленным. Одно типичное использование должно установить неинициализированные переменные экземпляра в блоке init:
class Temperature {
var fahrenheit : Number;
var celcius : Number;
function show() { println( "Fahrenheit: {fahrenheit}, Celcius: {celcius}" ) }
init {
if (not isInitialized(fahrenheit)) {
fahrenheit = celcius * 9 / 5 + 32
} else {
celcius = (fahrenheit - 32) * 5 / 9
}
}
}
Temperature{fahrenheit: 98.6}.show();
Temperature{celcius: 100}.show();
Это напечатает:
Fahrenheit: 98.6, Celcius: 37.0 Fahrenheit: 212.0, Celcius: 100.0
Если обновление требуется какое-либо время, набор происходит, то isInitialized может использоваться в onReplaceClause:
class Temperature {
var fahrenheit : Number on replace {
if (isInitialized(fahrenheit)) {
celcius = (fahrenheit - 32) * 5 / 9
}
}
var celcius : Number on replace {
if (isInitialized(celcius)) {
fahrenheit = celcius * 9 / 5 + 32
}
}
function show() { println( "Fahrenheit: {fahrenheit}, Celcius: {celcius}" ) }
}
Отметьте, что isInitialized предотвращает обновление, когда переменные экземпляра первоначально устанавливаются в значение по умолчанию.