可选参数
MQL5 允许在描述函数时为参数指定默认值。为此,可使用 初始化 语法,即在参数右边( = 符号之后)输入对应类型的字面量。例如:
void function(int value = 0); |
调用函数时,可以省略这些参数的自变量。那么它们的值将被设置为默认值。这样的参数称为可选参数。
可选参数必须在参数列表的末尾。也就是说,如果第 i 个参数是用初始化声明的,那么所有后续参数也必须这样。否则,将显示编译错误“参数缺少默认值”。下面的函数说明就有这个问题。
double Largest(const double v1, const double v2 = -DBL_MAX,
|
提供了两种解决方案:一个是 v3 参数也必须有默认值,一个是 v2 参数必须成为强制参数。
从右向左调用函数时,只能省略可选自变量。即如果函数有两个参数,并且都是可选的,那么在调用时,不能跳过第一个,而且要指定第二个。传递的单个值将与第一个参数匹配,第二个将被视为忽略。即使两个自变量都丢失,仍然需要空的圆括号。
分析寻找三个数中最大值的函数。第一个参数是必选的,后两个是可选的,默认等于 double 类型的最小可能数值。因此,在没有显式传递值的情况下,它们中的每个参数肯定会小于(或者极端情况下,等于)所有其他参数。
double Largest(const double v1, const double v2 = -DBL_MAX,
|
以下是调用方法:
Print(Largest(1)); // ok: 1
|
利用可选参数,MQL5 在自定义函数中实现了具有可变数量参数的函数概念。
与 C++ 不同,MQL5 不支持使用省略语法来定义具有可变数量参数的函数。同时,MQL5 API 中的某些内置函数在描述时就使用了省略号,同时接受可变数量的任意参数。例如, Print 函数。它的原型是这样的:void Print(argument, ...)。因此,我们可以使用最多 64 个自变量(由逗号分隔,不包括数组)来调用这个函数,这些会在日志中显示。