Filling an array at compile time
bauss
jj_1337 at live.dk
Wed Feb 9 10:25:34 UTC 2022
On Wednesday, 9 February 2022 at 10:01:15 UTC, Anonymouse wrote:
> On Wednesday, 9 February 2022 at 08:12:52 UTC, Vindex wrote:
>> Will the loop (foreach) run at compile time? How can I make it
>> work at compile time?
>>
>> ```
>> import std.csv, std.stdio;
>>
>> alias Record = Tuple!(string, string, string);
>>
>> immutable string[][] table;
>>
>> shared static this() {
>> string csvText = import("file.csv");
>> foreach (record; csvReader!Record(csvText)) {
>> table ~= [record[0], record[1], record[2]];
>> }
>> }
>>
>> void main() {
>> writeln(table):
>> }
>> ```
>
> I would do this.
>
> ```
> import std;
>
> alias Record = Tuple!(string, string, string);
>
> static immutable string[][] table = () {
> string[][] table;
> string csvText = import("file.csv");
>
> foreach (record; csvReader!Record(csvText)) {
> table ~= [record[0], record[1], record[2]];
> }
>
> return table;
> }();
>
> pragma(msg, table); // Available at compile-time
>
> void main() {
> writeln(table);
> }
> ```
>
> And then `-J{path}` to tell the compiler where to find
> `file.csv`.
>
> ```
> dmd -J. csv.d
> ```
Is it guaranteed that the value is initialized at compiletime
however?
Something being available at compiletime isn't the same as being
initialized at compiletime only.
If it's guaranteed then that's indeed the best solution.
More information about the Digitalmars-d-learn
mailing list