在Delphi匿名方法中不可能使用var参数吗?
在匿名方法中不能使用var参数吗?以下示例说明了我面临的问题:在Delphi匿名方法中不可能使用var参数吗?,delphi,parameters,var,delphi-2009,anonymous-methods,Delphi,Parameters,Var,Delphi 2009,Anonymous Methods,在匿名方法中不能使用var参数吗?以下示例说明了我面临的问题: program Project2; {$APPTYPE CONSOLE} type TTextTransformProc = reference to procedure(var AText: string); procedure WriteTransformedText(const AText: string; AProc: TTextTransformProc); var S: string; begin S
program Project2;
{$APPTYPE CONSOLE}
type
TTextTransformProc = reference to procedure(var AText: string);
procedure WriteTransformedText(const AText: string; AProc: TTextTransformProc);
var
S: string;
begin
S := AText;
AProc(S);
Writeln(S);
end;
procedure UpperCaseProc(var AText: string);
var
i: integer;
begin
for i := 1 to Length(AText) do
AText[i] := UpCase(AText[i]);
end;
begin
WriteTransformedText('This is a test.', UpperCaseProc);
Readln;
end.
代码可以编译,但运行时会出现访问冲突错误,并且没有大写字符串。如果删除对的引用,代码将按预期工作。这是编译器的缺陷。你的代码是正确的。编译器是错误的。在你能得到一个更现代的编译器之前,你必须找到一个解决方法 可能是Delphi 2009的bug。这段代码和XE2一样工作正常。已经在Delphi 2010中工作了。谢谢您的回答。在我的特殊情况下,最好的解决方法是使用返回字符串的函数。这可能是更好的设计,因为它更易于组合