function Resizer(X: Real; Y: Real = 2.0): Real;
var
F: TResizer;
N: Real;
语句
F := Resizer;
F(N);
导致(N, 1.0)传给Resizer。
默认参数局限于能被常量表达式所表示的值,所以,动态数组、过程、类、类引用或者接口类型的参数除了nil外不能给它们指定默认值,而记录、变体、文件、静态数组和对象类型则根本不能指定默认值。关于调用有默认值的例程,请参考Calling procedures and functions。
Default parameters and overloaded routines(默认参数和重载例程)
若在重载例程中使用默认参数,要避免引起歧义。比如,考虑下面的代码
procedure Confused(I: Integer); overload;
...
procedure Confused(I: Integer; J: Integer = 0); overload;
...
Confused(X); // 要调用哪一个呢?
实际上,哪个过程都不会调用,代码产生编译错误。
Default parameters in forward and intece declarations(
默认参数)
若例程是forward声明或出现在单元的接口部分,则默认参数值(若有的话)必须在
接口部分的声明中指定。这种情况下,定义(实现)声明中的默认值可以被忽略,但如果定义声明包含默认值的话,它们必须和forward声明或接口部分的声明一致。 forward声明中的forward
- 93 - 声明或在
Procedures and functions
Calling procedures and functions(调用过程和函数)
Calling procedures and functions(调用过程和函数)
当调用一个过程或函数时,程序控制从函数的调用点转到例程体中。调用例程时,你可以使用例程的名称(带或不带限定符),也可以使用指向例程的过程变量。不管哪种情况,若例程声明使用参数,则调用时必须传递参数,并且它们的顺序和类型必须一致。传递给例程的参数叫做实参,而声明例程时的参数称为形参。
当调用例程时,记住
? 用来传递指定类型的常量参数和数值参数的表达式必须和相应的形参是赋值兼容的;
? 用来传递var和out参数的表达式必须和相应的形参类型相同,除非形参没有指定类型(无类型); ? 只有能被赋值的表达式可用作var和out参数;
? 如果例程的形参是无类型的,numerals and true constants with numeric values不能用作实参。
当调用使用默认参数的例程时,第一个默认参数后面的实参也必须使用默认值,像SomeFunction(,,X)形式的调用是非法的。
当一个例程全部使用默认参数、并且都使用默认值调用时,可以省略它的括号。比如,给定过程声明 procedure DoSomething(X: Real = 1.0; I: Integer = 0; S: string = '');
下面的调用是等同的。
DoSomething();
DoSomething;
Open array constructors(开放数组构造器)
开放数组构造器允许你在函数和过程调用中直接构造数组,它们只能被当作开放数组参数或Variant开放数组参数进行传递。
开放数组构造器和集合构造器类似,是由逗号隔开的表达式序列,并且被一对中括号包围。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-67.html
比濒海战斗舰强百倍
台湾如此
中国人所有内脏都吃