Постепенно я стал использовать больше вариантов - они могут быть очень полезны в определенных местах для переноса типов данных, которые неизвестны во время компиляции. полезное значение - UnAssigned («У меня нет значения для вас»). Думаю, я давно обнаружил, что функция:
function DoSomething : variant;
begin
If SomeBoolean then
Result := 4.5
end;
, похоже, эквивалентна:
function DoSomething : variant;
begin
If SomeBoolean then
Result := 4.5
else
Result := Unassigned; // <<<<
end;
Я предположил, что это рассуждение, что вариант имеет должен создаваться динамически, и если SomeBoolean был FALSE, компилятор создал его, но он был «Unassigned» (<> nil?). Чтобы еще больше стимулировать это мышление, компилятор не выдает никаких предупреждений, если вы не присваиваете Result.
Только сейчас Я обнаружил неприятную ошибку, когда мой первый пример (где «Результат» не является явным, по умолчанию установлен на «ноль») фактически возвращал «старое» значение откуда-то еще.
Должен ли я ВСЕГДА назначать Результат (как я это делаю, когда использую prefefined типы) при возврате варианта?