Свойства и ref возвращают значения в D - PullRequest
3 голосов
/ 07 августа 2011

Проверка следующего в D

import std.stdio;

struct S
{
    int _val;
    @property ref int val() { return _val; }
    @property void val(int v) { _val = v; writeln("Setter called!"); }
}

void main()
{
    auto s = S();
    s.val = 5;
}

выводит "Settter called!" в качестве вывода.

Какое правило использует компилятор для определения, вызывать ли первую или вторую реализацию?

1 Ответ

5 голосов
/ 07 августа 2011

Здесь вы предоставляете два метода @property, один принимает аргумент, другой - нет. Когда вы делаете s.val = 5;, то, что вы на самом деле делаете, это s.val(5), но, поскольку val является @property, вы можете записать его как свойство, а не вызов метода (см. http://d -programming- language.org/function.html#property-functions). Начиная с s.val(5) компилятор может выполнять стандартное разрешение перегрузки - см. http://d -programming-language.org / function.html # function-overloading .

...