property syntax strawman
Steven Schveighoffer
schveiguy at yahoo.com
Mon Aug 3 05:52:00 PDT 2009
On Sun, 02 Aug 2009 15:23:44 -0400, John C <johnch_atms at hotmail.com> wrote:
> Andrei Alexandrescu wrote:
>> Michiel Helvensteijn wrote:
>>> Andrei Alexandrescu wrote:
>>>
>>>> Then in a later message you mention:
>>>>
>>>> bool empty.get() { ... }
>>>> void empty.set(bool b) { ... }
>>>>
>>>> which I like and which does not seem to have difficulties; the names
>>>> "get" and "set" will be never used as such.
>>>
>>> Yes, those are two notations for the same thing, and they have the same
>>> problem. Let me demonstrate:
>>>
>>> --------------------------------------------------
>>> struct S {
>>> int get() { return 42; }
>>> };
>>>
>>> struct T {
>>> S _s;
>>> S property.get() { return _s; }
>>> void property.set(S s) { _s = s; }
>>> }
>>>
>>> T t;
>>>
>>> auto X = t.property.get();
>>> --------------------------------------------------
>>>
>>> What is the type of X? It can be either S or int, depending on how D
>>> handles
>>> the situation.
>>>
>>> The ambiguity is in the possibility to directly reference the getter
>>> and
>>> setter methods. In that other subthread (the older one) I listed some
>>> possible solutions.
>>>
>>> The first is to make such a program an error.
>>>
>>> The second is not to allow a direct reference to a getter/setter (so X
>>> is an
>>> int).
>>>
>>> The third is to let the getter/setter overshadow S members (so X is an
>>> S).
>> I see. My view is that .get and .set are simply symbolic placeholders,
>> but indeed some may get confused.
>> Andrei
>
> Does the ambiguity go away if we replace the '.' with a space?
>
> Declaration:
>
> bool empty get();
> void empty set(bool);
>
> Declaration:
>
> bool empty get() { return empty_; }
> void empty set(bool b) { empty_ = b; }
The ambiguity of declaration, not the ambiguity of usage, unless you want
to use the space to denote the usage also?
-Steve
More information about the Digitalmars-d
mailing list