在Delphi中命名/可选参数?

在其中一个Delphi演示应用程序中,我偶然发现了一些不知道Delphi编译器接受的语法:
// ......\Demos\DelphiWin32\VCLWin32\ActiveX\OleAuto\SrvComp\Word\    
// Main.pas,line 109

Docs.Add(NewTemplate := True); // note the assignment

我似乎无法重现这种类型的参数传入我自己的代码,我从来没有看到有人使用它.所以这些是我的问题:

>我可以在“普通”方法中使用它,并且它是“Delphi语言”的一部分,还是这些编译器为自动化对象而使用?
>为了能够使用这些,需要什么?
>这是什么类似C#4的命名和可选参数?

Additional information: I usually pass
records or simple classes when there
are many optional parameters to
methods,but it looks like I wouldn’t
need that with this Syntax. I’m aware
of default parameter values,but their
usefulness is limited because you
cannot provide any parameters to the
right of an omitted one. In JavaScript
I’m using this named parameter style
all the time (be it with different
Syntax),and it’s powerful.

解决方法

显然,Delphi语言支持命名参数,因为它们出现在示例Delphi代码中. Delphi支持自动化对象上的命名参数,它们是实现Idispatch接口的对象. There are restrictions on the types the parameters and return types can have;特别是,他们不能是Delphi类.

我不认为从命名参数中寻找的便利性将超过您通过使用IDispatch.Invoke方法将每个方法调用路由到的所需性能.呼叫也可能需要先使用GetIDsOfNames.你没有看到更多的代码,因为后期绑定通常是人们试图避免的.尽可能使用早期绑定,以避免查找调度ID和间接方法调用的成本.

Delphi通过允许认值来支持自动代码中的可选参数.只要您也省略所有后续参数的实际参数,您可以省略具有认值的任何参数的实际参数 – 编译器确保函数的声明允许.

我认为可选参数被高估了.他们为(1)人编写代码节省时间,但不能为(许多)阅读代码的人节省时间.任何阅读它的人都需要知道任何未指定参数的认值,所以您也可以直接提供所有的值.

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...