在 Delphi 匿名方法中不能使用 var 参数吗?
Is it not possible to use var parameters in a Delphi anonymous method?
匿名方法中不能使用var
参数吗?下面的例子说明了(SSCCE)我遇到的问题:
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.
代码可以编译,但是当 运行 我收到访问冲突错误(并且没有大写字符串)。如果我删除 reference to
,代码将按预期工作。
这是一个编译器缺陷。你的代码是正确的。编译器是错误的。在获得更现代的编译器之前,您必须找到解决方法。
匿名方法中不能使用var
参数吗?下面的例子说明了(SSCCE)我遇到的问题:
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.
代码可以编译,但是当 运行 我收到访问冲突错误(并且没有大写字符串)。如果我删除 reference to
,代码将按预期工作。
这是一个编译器缺陷。你的代码是正确的。编译器是错误的。在获得更现代的编译器之前,您必须找到解决方法。