правильный сценарий действий, чтобы определить, существует ли уже объект (с локальной переменной, определенной внутри условного)

У меня есть объект Rect, который я хотел бы создать и задать его свойства только один раз. После этого я хочу просто изменить его свойства, поскольку он уже существует. Это моя общая идея

if(theRect == undefined){

  Alert.show("creating");

  var theRect:Rect = new Rect();
  //then set properties
  addElement(theRect); //then add it using addElement because addChild() does not work

} else {

  Alert.show("updating");

  //no need to create it since it's already been created
  //just access and change the properties

}

Я пробовал несколько способов и комбинаций для условной проверки if:

if(theRect == undefined){
if(theRect == null){
declaring and not declaring `var theRect:Rect;` before the if check
declaring and instantiating to null before the if check `var theRect:Rect = null;` 

но не может добиться желаемого эффекта. Каждый раз, когда выполняется этот блок кода, и в зависимости от того, какую версию я использовал, он либо выдает ошибку «не удается получить доступ к нулевому объекту», либо оператор if всегда принимает значение true и создает новый объект Rect, и я получаю сообщение «создание " Тревога.

Как правильно создать этот Rect, но только если его не существует?


person touB    schedule 19.03.2010    source источник


Ответы (1)


У вас есть проблемы с областью видимости в представленном вами коде.

Я думаю, вы хотите:

var theRect:Rect;

...

if(theRect == null)
{
    theRect = new Rect();
    ...
}
...

Вам нужно сначала объявить theRect, но вам не нужно его создавать. Вы можете лениво создать его экземпляр позже, проверив, является ли он нулевым.

Как вы это настроили, вы создали локальную версию theRect внутри вашего if оператора, который не будет виден в другом месте. Вы также получите сообщение об ошибке при попытке доступа к theRect , если вы не заявили об этом заранее.

person CookieOfFortune    schedule 19.03.2010
comment
Это была одна из тех вещей, которые я пробовал - создать переменную перед проверкой if, но у меня все еще были проблемы. Но это действительно была проблема с областью видимости, и теперь я понимаю, почему, потому что все это находится в методе, и объявление тоже повторялось, глупый я. Переехал сейчас и все хорошо. Спасибо за подсказку. - person touB; 19.03.2010