Properties: problems

Chad J chadjoan at __spam.is.bad__gmail.com
Fri Jul 31 00:37:18 PDT 2009


John C wrote:
> Chad J wrote:
>> John C wrote:
>>> Here's a couple of annoying problems I encounter quite often with D's
>>> properties. Would having some form of property syntax fix them?
>>>
>>> 1) Array extensions:
>>>
>>>   class Person {
>>>
>>>     string name_;
>>>
>>>     string name() {
>>>       return name_;
>>>     }
>>>
>>>   }
>>>
>>>   auto person = getPerson();
>>>   auto firstAndLast = person.name.split(' ');
>>>
>>> The above line currently requires parentheses after 'name' to compile.
>>>
>>
>> This one is weird.  After defining getPerson() I was able to rewrite the
>> last line into this and make it compile:
>>
>>     auto firstAndLast = split(person.name," ");
> 
> Yes, that's D's special array syntax, where free functions can be called
> as if they were "methods" of an array.
> 
>>
>> Note that you need qoutes, not just ' '.
> 
> My mistake.
> 
>> But even
>>
>>     auto firstAndLast = person.name.split(" ");
>>
>> does not compile.
>> main2.d(36): Error: function expected before (), not
>> split(person.name()) of type immutable(char)[][]
>>
>> This is probably a compiler bug.
> 
> This is my point. The compiler can't tell that "name" is a property, so
> it expects parentheses "name()" to work. That's the problem.
> 

I'm saying this actually should work in current D2.

>>
>> I don't think property syntax is truly necessary for this example.  You
>> are fortunate enough to be using strings, which are passed by reference.
> 
> Sorry, I don't see how this statement is relevant at all.

It's the pointed answer to your question:

>>> Here's a couple of annoying problems I encounter quite often with D's
>>> properties. Would having some form of property syntax fix them?

They should work already, so property syntax can't possibly fix them.
At least not on a conceptual level.  On a practical level, it is quite
possible that property syntax would improve the situation, if only
because the information is provided to the compiler in a much more
direct manner.



More information about the Digitalmars-d mailing list