2011-05-02 110 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