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.