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