Is there anyway to Deify the following code snippet?

Salih Dincer salihdb at hotmail.com
Wed Apr 16 03:59:42 UTC 2025


On Tuesday, 15 April 2025 at 21:06:30 UTC, WhatMeWorry wrote:
> I had assumed that ref keyword negated the use of * and & 
> operators but when I try to use it, DMD is saying "only 
> parameters, functions and `foreach` declarations can be `ref`". 
> Fair enough. I thought that the * and & operator was for when 
> interfacing with C/C++ code. Since this is entirely in D code, 
> I thought there might be other options.
>

These are accurate observations! As you know, classes can be more 
practical in the programming world. Have you also tried looking 
at the topic from the following perspective?

```d
class S
{
     char  c;
     float f;

     override string toString()
         => text(i"[c = $(c), f = $(f)]");
}

import std.conv, std.stdio;
void main()
{
     S[int] aa;  // int -> S as an associative array (not by 
address but by direct reference)

     auto u = new S();
     u.c = 'a';
     u.f = 1.33;
     aa[0] = u;

     auto v = new S();
     v.c = 'z';
     v.f = 3.14;
     aa[1] = v;
	
     aa.writeln;

     S d = aa[0];
     d.writeln;

     d = null; // d no longer points to the object, but aa[0] 
still does

     // let's change the u object:
     u.c ^= ' '; // magic!
     u.f *= 3;
     assert(d is null);

     d = aa[0];
     d.writeln;
     assert(d is null);

     aa.writeln;
} /* Prints:
[0:[c = a, f = 1.33], 1:[c = z, f = 3.14]]
[c = a, f = 1.33]
[c = A, f = 3.99]
[0:[c = A, f = 3.99], 1:[c = z, f = 3.14]]
//*/
```

SDB at 79


More information about the Digitalmars-d-learn mailing list