3

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!"られます。

コンパイラは、最初の実装と 2 番目の実装のどちらを呼び出すかを決定するためにどのような規則を使用しますか?

4

1 に答える 1

5

ここでは 2 つの@propertyメソッドを提供しています。1 つは引数を受け入れ、もう 1 つは受け入れません。を実行するときs.val = 5;、実際に実行しているのはですs.val(5)が、メソッド呼び出しではなくプロパティとして記述できます ( http://d-programming-language.org/function.html#property-functionsを参照)。コンパイラから標準のオーバーロード解決を行うことができます - http://d-programming-language.org/function.html#function-overloadingを参照してください。val@propertys.val(5)

于 2011-08-07T19:48:35.780 に答える