www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - why is it a class property cannot be used like a.b ~= c; ?

reply someone <someone somewhere.com> writes:
```d
public class cSomething {

    private:

    dstring pstrWhatever = null;

    public:

     safe dstring whatever() { return pstrWhatever; }
     safe void whatever(const dstring lstrWhatever) { pstrWhatever 
= lstrWhatever; }

}

void main() {

    cSomething lobjSomething = new cSomething();
    lobjSomething.whatever = r"abc"d;
    lobjSomething.whatever ~= r"def"d; /// Error: 
`lobjSomething.whatever()` is not an lvalue and cannot be modified

}
```
Sep 04 2021
parent reply jfondren <julian.fondren gmail.com> writes:
On Saturday, 4 September 2021 at 23:33:39 UTC, someone wrote:
 ```d
 public class cSomething {

    private:

    dstring pstrWhatever = null;

    public:

     safe dstring whatever() { return pstrWhatever; }
     safe void whatever(const dstring lstrWhatever) { 
 pstrWhatever = lstrWhatever; }

 }

 void main() {

    cSomething lobjSomething = new cSomething();
    lobjSomething.whatever = r"abc"d;
    lobjSomething.whatever ~= r"def"d; /// Error: 
 `lobjSomething.whatever()` is not an lvalue and cannot be 
 modified

 }
 ```
You're returning a copy of a slice, so if this compiled nothing useful would happen anyway. This works if `whatever()` returns `ref dstring` instead, with no other changes. Search https://dlang.org/spec/function.html for 'lvalue' and this pops right up.
Sep 04 2021
parent someone <someone somewhere.com> writes:
On Saturday, 4 September 2021 at 23:57:09 UTC, jfondren wrote:

 You're returning a copy of a slice, so if this compiled nothing 
 useful would happen anyway. This works if `whatever()` returns 
 `ref dstring` instead, with no other changes. Search 
 https://dlang.org/spec/function.html for 'lvalue' and this pops 
 right up.
At first glance it seems a bit counter-intuitive but yes, you are right, thanks for the link jfronden :)
Sep 04 2021