Установить нескалярную переменную в ноль и вернуть все, на что она ссылается, в одном выражении? - PullRequest
0 голосов
/ 04 августа 2020

В проекте, над которым я работаю, у меня есть следующие операции более чем в нескольких местах:

MyClass obj = editObj;
editObj = null;
doSomething(obj); 

Смысл этого в том, чтобы установить переменную editObj для ссылки на null, одновременно "перенося" все, на что он ссылается, в другую переменную, чтобы я мог продолжать ее использовать.

Чтобы поместить это в контекст, вот очень упрощенная программа:

class MyClass{
  String text = '';
  MyClass(this.text);

  @override
  String toString() => 'MyClass{text: $text}';
}


MyClass editObj;


void doSomething(MyClass obj) {
  print('1 obj: $obj   editObj: $editObj');
  
  Future.delayed(Duration(seconds: 1), (){
    obj.text = 'two';    
    print('2 obj: $obj   editObj: $editObj');
  });  
}

void main() {  
  editObj = MyClass('one');

  MyClass tmp = editObj;
  editObj = null;
  doSomething(tmp);  
}

Это напечатает

1 obj: MyClass{text: one}   editObj: null
2 obj: MyClass{text: two}   editObj: null

Если бы main() вместо этого выглядело так

void main() {  
  editObj = MyClass('one');

  doSomething(editObj);
  editObj = null;
}

, результаты были бы

1 obj: MyClass{text: one}   editObj: MyClass{text: one}
2 obj: MyClass{text: two}   editObj: null

Конечно, я мог бы просто установить От editObj до null в начале doSomething(), но я бы предпочел обрабатывать его из вызывающего кода.

Есть ли менее подробный способ достижения этого? Я думаю о чем-то вроде

doSomething(editObj = null) // Doesn't work

, т.е. установка editObj (переменная!) На null, в то же время возвращая все, на что он ссылается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...