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