#delphi
Вопрос:
В Delphi есть возможность выйти со значением (пример: Выход(0);), но как выйти со значением, если возвращаемое значение является записью?
TIntResult = record
Value: Integer;
Error: String;
end;
function GetCount: TIntResu<
begin
if not IsLoggedIn then
Exit(Value: 0; Error: 'Not logged in'); // I want this
if not IsAdmin then
Exit(TIntResult(Value: 0; Error: 'Not Admin')); // or this
...
end;
Ответ №1:
Конечно, вы всегда можете использовать Result
переменную и Exit
.
Но если вы хотите использовать синтаксис Delphi 2009 Exit(...)
— без указания TIntResult
типизированной переменной-двумя наиболее очевидными вариантами являются следующие:
Использование конструктора
type
TIntResult = record
Value: Integer;
Error: string;
constructor Create(AValue: Integer; const AError: string);
end;
{ TIntResult }
constructor TIntResult.Create(AValue: Integer; const AError: string);
begin
Value := AValue;
Error := AError;
end;
Тогда вы можете сделать:
function Test: TIntResu<
begin
// ...
Exit(TIntResult.Create(394, 'Invalid page.'));
end;
Использование TIntResult
функции-возврата
function IntRes(AValue: Integer; const AError: string): TIntResu<
begin
Result.Value := AValue;
Result.Error := AError;
end;
Тогда вы можете сделать:
function Test: TIntResu<
begin
// ...
Exit(IntRes(394, 'Invalid page.'));
end;
Комментарии:
1. Это легко показывает, насколько похожи оба варианта; одна из вспомогательных функций «старой школы» существует уже
Rect()
целую вечность.