某些函數需要一個變量來發送一個值。但有時候我不需要這個值,也不想定義一個變量來使用它作爲函數out
參數。就像這樣:旁路函數「out」參數
procedure test(out SomeVar: string);
begin
//...
end;
我想安全地執行這樣的:
test;
某些函數需要一個變量來發送一個值。但有時候我不需要這個值,也不想定義一個變量來使用它作爲函數out
參數。就像這樣:旁路函數「out」參數
procedure test(out SomeVar: string);
begin
//...
end;
我想安全地執行這樣的:
test;
您可以創建一個包裝:
procedure test(); overload;
var
SomeVar : string;
begin
test(SomeVar);
end;
注意:您還必須標註其他版本overload
,或者你可以打電話給你的包裝test
以外的東西,並刪除overload
。
另一種選擇:(你單位的頂部,也許)某處聲明一個虛擬變量:
var
DummyStr : string;
那麼你沒有你想調用的函數每次來聲明一個新的變量。
test(DummyStr);
使用指針:
procedure test(SomeVar: PString = nil);
begin
if SomeVal <> nil then SomeVar^ := '';
//...
if SomeVal <> nil then SomeVar^ := ...;
end;
test;
var
s: string;
test(@s);
有一些系統函數具有'out'參數,我正在尋找它們的解決方案。我認爲一個包裝(@Blorgbeard)是唯一的解決方案(如果我不想使用全局變量)。謝謝 – SAMPro
可以重載的過程:
procedure test(out SomeVar: string); overload;
begin
//...
end;
procedure test; overload; inline;
var dummy: string;
begin
test(dummy);
end;
請注意inline
關鍵字,自Delphi 2005 AFAIR起可用。
我最常做的就是用的,而不是out
參數指針:
procedure test(SomeVarP: PString=nil);
begin
if SomeVarP<>nil then
SomeVarP^ := ....
end;
因此,你可以使用:
var s: string;
test;
test(@s);
我認爲它是在2006年推出的,而不是在2005年推出的 – OnTheFly
這是唯一的辦法? IDK可以使用'nil'或其他東西而不是變量嗎? – SAMPro
不怕。如果某個過程指定了輸出參數,則必須提供該參數。 – Blorgbeard
添加了另一個選項.. – Blorgbeard