用这样variable.foo(arguments)
的方式调用foo(variable, arguments)
这样的函数
class Car {
enum economy = 12.5; // 每公升平均
private double fuelAmount; // 公升
this(double fuelAmount) {
this.fuelAmount = fuelAmount;
}
double fuel() const {
return fuelAmount;
}
// ...
}
成员函数有用,但不是都要搞成成员函数
,因为有些是特殊函数,搞不成.
bool canTravel(Car car, double distance) {
return (car.fuel() * car.economy) >= distance;
}
就可以类似
if (car.canTravel(100)) { //保持形式的统一
// ...
}
当函数是链式
调用时,特别有用.
int[] divide(int[] slice, int divisor) {
int[] result;
result.reserve(slice.length);
foreach (value; slice) {
result ~= value / divisor;
}
return result;
}//除
int[] multiply(int[] slice, int multiplier) {
int[] result;
result.reserve(slice.length);
foreach (value; slice) {
result ~= value * multiplier;
}
return result;
}//乘
// 偶数
int[] evens(int[] slice) {
int[] result;
result.reserve(slice.length);
foreach (value; slice) {
if (!(value % 2)) {
result ~= value;
}
}
return result;
}
就可以这样调用:
import std.stdio;
// ...
void main() {
auto values = [ 1, 2, 3, 4, 5 ];
writeln(evens(divide(multiply(values, 10), 3)));
}
//或者这样
writeln(values.multiply(10).divide(3).evens);
//
import std.stdio;
import std.algorithm;
void main() {
auto values = [ 1, 2, 3, 4, 5 ];
writeln(values
.map!(a => a * 10)
.map!(a => a / 3)
.filter!(a => !(a % 2)));
}//一步步.