我在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分配一个字符串或整数,这就是为什么它是一个变种......
答案 0 :(得分:3)
当我这样做时
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;