2011-05-02 134 views
0

我有这样的代码在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; 

我所试图做的,做起来很富的paramater可以设置。我尝试使用var关键字如

DoSomething(var MyVar : Variant).... 

但是不会编译。

这样做的原因,是DoSomething的可分配字符串或整数MyVar的这就是为什么它的一个变种...

+1

使用'var'参数(按引用传递),你的'富时:字符串;'应该成为'FOO:变体;就像编译器告诉你的一样。 – 2011-05-02 06:33:29

回答

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; 
+3

为什么你想重新发明这样的车轮。如果你想要运行时确定的类型,使用变体是很好的 – 2011-05-02 02:37:54