如何扩展结构只是在D中导入包?

时间:2015-03-17 20:42:47

标签: import d

我有这个斐波那契数字生成器。

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方法。这背后的机制是什么?

1 个答案:

答案 0 :(得分:6)

机制是统一函数调用语法:

http://dlang.org/function.html#pseudo-member

简而言之,如果a.foo(b...)无效,编译器会尝试将其重写为foo(a, b...)