Присвоить значение параметру варианта - PullRequest
0 голосов
/ 02 мая 2011

Я получил такой код в Delphi XE

function DoSomething(MyVar : Variant) : boolean;
begin
  MyVar := 'Bar';
  Result := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  foo : string;
begin
  foo := '';
  showmessage(foo); // shows blank ofc
  DoSomething(foo);
  showmessage(foo); // still blank
end;

Что я пытаюсь сделать, сделай так, чтобы можно было установить параметр foo. Я пытался использовать ключевое слово var, как

DoSomething(var MyVar : Variant)....

но это не скомпилируется.

Причина этого в том, что DoSomething может присвоить строку или целое число MyVar, поэтому это вариант ...

1 Ответ

3 голосов
/ 02 мая 2011

Когда я делаю

function Foo(var Bar: variant): boolean;
begin
  Bar := 'beta';
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  a: variant;
begin
  a := 'alpha';
  Foo(a);
  caption := a;
end;

Заголовок формы beta.Поэтому он компилируется для меня ...

Вы пытаетесь отправить string в качестве параметра var variant.Вам нужно отправить variant в качестве параметра var variant, как говорит компилятор ([DCC Error] Unit1.pas(35): E2033 Types of actual and formal var parameters must be identical)!

Но варианты часто не лучшие вещи для работы (неоптимальная производительность, чтобыупомянуть одну вещь).

Вы можете сделать что-то простое, как

type
  TValType = (vtString, vtInteger);
  TData = record
    ValType: TValType;
    ValStr: string;
    ValInt: integer;
  end;

и сделать

function Foo(var Data: TData): boolean;
...