Assigning to array of structs with custom constructor
Salih Dincer
salihdb at hotmail.com
Mon Apr 25 23:59:52 UTC 2022
On Monday, 25 April 2022 at 16:11:47 UTC, rassoc wrote:
>
> ```d
> import std;
>
> void main() {
> struct Foo { string s; }
> Foo[] arr = ["abc", "def", "ghi"].map!Foo.array;
> arr.writeln; // => [Foo("abc"), Foo("def"), Foo("ghi")]
> }
> ```
Thank you...
Very very nice and simple but not extensible!
Because it cannot be used with other possibilities such as
```chunks()``` and ```take()```. Also it cannot be customized
with ```toString()```. I guess even when ```this()```
constructor is added, ```map()``` explodes! So it not to
explode, it is necessary to move away from simplicity:
```d
import std.algorithm;
import std.range, std.stdio;
void main() {
struct Foo {
string s; /*
string s;
string toString() {
return s;
}//*/
}
auto arr1 = ["abc", "def", "ghi"]
.map!Foo.array; /*
.map!(a => Foo(a))
.array;//*/
typeof(arr1).stringof.writeln(": ", arr1);
struct Bar {
string s;
//*
this(R)(R result) {
import std.conv : to;
this.s = result.to!string;
}//*/
string toString() {
return s;
}
}
auto arr2 = "abcdefghi"
.chunks(3)
.map!(a => Bar(a))
.array;
typeof(arr2).stringof.writeln(": ", arr2);
} /* OUTPUT:
Foo[]: [Foo("abc"), Foo("def"), Foo("ghi")]
Bar[]: [abc, def, ghi]
*/
```
SDB at 79
More information about the Digitalmars-d-learn
mailing list