纯粹作为家庭练习,旨在更好地理解一些语言基础知识,我试图重新实现Ord
功能,但我遇到了一个问题。
实际上,现有的Ord
函数可以接受各种不同类型的参数(AnsiChar
,Char
,WideChar
,Enumeration
,{{ 1}},Integer
)并且可以返回Integer或Int64。
我无法弄清楚如何声明同一个函数的多个版本。
如何在Delphi中编码?
答案 0 :(得分:12)
我无法弄清楚如何声明同一个函数的多个版本。
它被称为function overloading。每个版本的输入参数必须不同,返回类型无关紧要。例如:
function Ord(X: Char): Integer; overload;
begin
// Whatever here
end;
function Ord(X: Integer): Integer; overload;
begin
// Something
end;
// etc.
答案 1 :(得分:11)
Ord
无法在Delphi中编码。虽然您可以使用the overload
directive编写具有相同名称的多个函数,但您无法以这种方式编写Ord
函数,因为它适用于任意数量的参数类型而无需多个定义。 (无论你编写了多少Ord
个重载,我总是可以提出一个类型,你的函数不会接受,但编译器会这样做。)
由于编译魔术,它的工作方式正常。编译器知道Ord
以及程序中的所有序数类型,因此它会在线执行函数的操作。其他编译器魔术函数包括Length
(魔法,因为它接受任意数组类型),Str
(魔术,因为它接受宽度和精度修饰符),以及ReadLn
(魔术,因为它接受任意参数数量。)