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 предотвращает обновление, когда переменные экземпляра первоначально устанавливаются в значение по умолчанию.