已经介绍过的 main()
函数是每个 D 程序的起点。一个函数可以有返回值(或没有返回值 void
),并且可以接受任意数量的参数:
// 接受两个 int 类型参数,返回 int 类型值的函数
int add(int lhs, int rhs) {
return lhs + rhs;
}
auto
类型如果返回值的类型定义为 auto
,D 编译器会自动推断返回值类型。所以,如果函数中有多个 return
的话这些返回值需要返回相同或兼容的类型。
auto add(int lhs, int rhs) { // 返回 `int` 类型
return lhs + rhs;
}
auto lessOrEqual(int lhs, int rhs) { // 返回 `double` 类型
if (lhs <= rhs)
return 0;
else
return 1.0;
}
函数可以选择定义默认参数,避免一些无聊冗余的重载工作。
void plot(string msg, string color = "red") {
...
}
plot("D rocks");
plot("D rocks", "blue");
一旦指定了默认参数,接下来的所有参数也必须是默认参数。
函数甚至可以在其他函数内部声明,在局部使用,对外部世界不可见。这些函数可以访问父作用域的局部对象:
void fun() {
int local = 10;
int fun_secret() {
local++; // 合法访问
}
...
这样的嵌套函数称为委托(delegates),稍后将对其进行更深入的解释。