& 符号被用于“转义”保留字,考虑下面的例子:
function GetPart: string;
const
LoremIpsum = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do ' +
'eiusmod tempor incididunt ut labore et dolore magna aliqua.';
var
start, end: integer;
begin
start := 2;
end := 10;
result := Copy(LoremIpsum, start, end - start + 1);
end;
显然,这段代码无法编译,因为end
是一个保留字,不能作为标识符使用。
但是,如果你还是想要使用end
作为变量名,你可以在它的前面加上&
:
function GetPart: string;
const
LoremIpsum = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do ' +
'eiusmod tempor incididunt ut labore et dolore magna aliqua.';
var
start, &end: integer;
begin
start := 2;
&end := 10;
result := Copy(LoremIpsum, start, &end - start + 1);
end;
这告诉编译器:“嘿,不要将下一个标记视为保留字”。
当然,有人可能会认为,在大多数情况下,最好使用非保留字作为标识符,而不是使用&
技巧来转义标记。但是,有时您需要让您的标识符具有由其他框架和技术指定的名称,因此Delphi需要支持一种允许将保留字用作标识符的方法。
(然而,就我个人而言,如果我找到的标识符恰好是保留字,即使没有“外部约束”要求那个名称,我也倾向于在自己的代码中使用&
技巧。)
with MyAwesomeComputation do End
无法编译。 - Andreas Rejbrand&
并不完全没有影响。(抱歉我这么挑剔。) - Andreas Rejbrand