Spec-Zone .ru
спецификации, руководства, описания, API

isInitialized Встроенная Функция

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