我有这个斐波那契数字生成器。
struct FibonacciSeries
{
int first = 0;
int second = 1;
enum empty = false;
@property int front() const
{
return first;
}
void popFront()
{
int third = first + second;
first = second;
second = third;
}
@property FibonacciSeries save() const
{
return this;
}
}
此结构没有take
方法,因此执行此命令(writeln(FibonacciSeries().take(5))
)时出现此错误。
a.d(66): Error: no property 'take' for type 'FibonacciSeries'
但是,通过导入range
包,它具有take
方法。这背后的机制是什么?
答案 0 :(得分:6)
机制是统一函数调用语法:
http://dlang.org/function.html#pseudo-member
简而言之,如果a.foo(b...)
无效,编译器会尝试将其重写为foo(a, b...)
。