今天我决定使用TParallel.For并成功用于Delphi 10.2.3
但TParallel.For有一个奇怪的定义,这种定义对我来说是新的.我也无法在Delphi文档中找到它的含义.
class function TParallel.&For(ALowInclusive, AHighInclusive: Integer; const AIteratorEvent: TProc<Integer>): TLoopResult;
Run Code Online (Sandbox Code Playgroud)
& Operator在这里是什么意思?使用TParallel.&For或TParallel.For之间有什么区别,因为两者都编译.
And*_*and 10
&符号用于"逃避"保留字.请考虑以下示例:
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;
Run Code Online (Sandbox Code Playgroud)
显然,这不会编译,因为它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;
Run Code Online (Sandbox Code Playgroud)
这告诉编译器,"嘿,不要将下一个标记视为保留字".
当然,有人可能会争辩说,在大多数情况下,最好使用非保留字作为标识符,而不是使用&技巧来转义令牌.但是,有时您需要您的标识符具有由其他框架和技术决定的名称,因此Delphi需要支持允许使用保留字作为标识符的方法.
(就个人而言,我确实倾向于&在我自己的代码中使用这个技巧,当我找到的标识符最自然的选择恰好是一个保留字时,即使没有'外部约束'需要该名称.)
这在文档中描述:
扩展标识符
您可能会遇到与Delphi语言保留字同名的标识符(例如,类中的类型或方法).例如,一个类可能有一个名为begin的方法.Delphi保留的单词如begin不能用于标识符名称.
如果您完全符合标识符,那么没有问题.例如,如果要将Delphi保留字类型用于标识名称,则必须使用其完全限定名称:
Run Code Online (Sandbox Code Playgroud)var TMyType.type // Using a fully qualified name avoids ambiguity with {{Delphi}} language keyword.作为一个较短的替代方案,&符号(&)可用于解决标识符和Delphi语言保留字之间的歧义.&阻止关键字被解析为关键字(即保留字).如果遇到与Delphi关键字同名的方法或类型,则可以在标识符名称前加上&符号时省略命名空间规范.但是当您声明一个与关键字同名的标识符时,您必须使用&:
Run Code Online (Sandbox Code Playgroud)type &Type = Integer; // Prefix with '&' is ok.
本文解释了&调用方法时不必要的原因.你可以写
TParallel.For(...);
Run Code Online (Sandbox Code Playgroud)
并且编译器能够解决歧义,因为您已经限定了标识符.