D 中的属性和 ref 返回值

发布于 2024-11-28 08:48:04 字数 339 浏览 2 评论 0原文

在 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;
}

会产生 "Setter called!" 作为输出。

编译器使用什么规则来确定是调用第一个还是第二个实现?

Testing the following in 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;
}

yields "Settter called!" as the output.

What rule does the compiler use to determine whether to call the first or the second implementation?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

去了角落 2024-12-05 08:48:04

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

Here you are providing two @property methods, one accepts an argument, the other does not. When doing s.val = 5;, what you're actually doing is s.val(5), but as val is a @property you can write it as a property rather than a method call (see http://d-programming-language.org/function.html#property-functions). From s.val(5) the compiler can do standard overload resolution - see http://d-programming-language.org/function.html#function-overloading.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文