D中的属性和ref返回值

时间:2011-08-07 19:41:10

标签: properties ref d

在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 个答案:

答案 0 :(得分:5)

这里提供两个@property方法,一个接受参数,另一个不接受。在执行s.val = 5;时,您实际执行的操作是s.val(5),但由于val@property,您可以将其编写为属性而不是方法调用(请参阅{ {3}})。从s.val(5)编译器可以执行标准重载解析 - 请参阅http://d-programming-language.org/function.html#property-functions