类方法有一个简单的定义
PROCEDURE Print (str : string = ''; VAR f : text);
这给出了编译器错误
Error: (3185) Default parameter required for "F"
这很奇怪,因为在this page上它说“变量参数不支持默认值”。忽略它,添加默认值:
PROCEDURE Print (str : string = ''; VAR f : text = stderr);
给出编译器错误
Error: (3203) Illegal expression
这里的正确语法是什么(正确的意思是我如何让编译器开心)?
答案 0 :(得分:4)
一旦参数具有默认值,后面的所有参数也必须具有默认值,这就是你有
的原因错误:(3185)" F"
所需的默认参数
在编译的这一点上,FPC没有检测到,从语法上讲, F 没有默认参数,它只是看到没有默认值。< / p>
你的声明应该是
PROCEDURE Print (VAR f : text; str : string = '');
为了更进一步,让我们采取这个功能:
procedure foo(a: integer = 8; b: integer);
如果你这样称呼它
foo(4);
编译器不知道 4 是否用于 a 而您忘记 b 或 4 适用于 b 。这就是必须始终将默认参数放在最后的原因。这也是FPC发出以下错误的原因:
错误:&#34; B&#34;
需要默认参数
答案 1 :(得分:0)
@Nestedtype解释的补充。
可以使用overloaded方法解决,而无需更改参数顺序,如
PROCEDURE Print (str : string; VAR f : text); overload; // Calls as Print('foo', f);
PROCEDURE Print (VAR f : text); overload; // Calls as Print(f);
并在实施部分中:
PROCEDURE Print (str : string; VAR f : text);
begin
// Do what you need
end;
PROCEDURE Print (VAR f : text);
begin
Print('', f); // Here '' is the "default" value
end;