Thread overview
Initialize static array without explicit length
Dec 03, 2018
Andrey
Dec 03, 2018
Simen Kjærås
Dec 03, 2018
Dennis
Dec 03, 2018
Simen Kjærås
December 03, 2018
Hi,
I want to create a static array and immediately init it with values:
> uint[xxxxx] data = [1,3,10,44,0,5000];

I don't want to set the length of it explicitly (xxxxx in square brackets). I want that compiler itself counted number of values (in example it is 6).

What should be a right syntax?
December 03, 2018
On Monday, 3 December 2018 at 09:51:45 UTC, Andrey wrote:
> Hi,
> I want to create a static array and immediately init it with values:
>> uint[xxxxx] data = [1,3,10,44,0,5000];
>
> I don't want to set the length of it explicitly (xxxxx in square brackets). I want that compiler itself counted number of values (in example it is 6).
>
> What should be a right syntax?

There's no special syntax for this (even though it's been requested numerous times). However, it's easy to implement in a library:

import std.traits : CommonType;

CommonType!T[T.length] staticArray(T...)(T args)
if (is(CommonType!T))
{
    return [args];
}

unittest {
    auto a = staticArray(1,2,3,4);
    static assert(is(typeof(a) == int[4]));
}

--
  Simen
December 03, 2018
On Monday, 3 December 2018 at 10:00:31 UTC, Simen Kjærås wrote:
> However, it's easy to implement in a library:

It even is in phobos:
https://dlang.org/phobos/std_array.html#.staticArray

```
import std.array: staticArray;
auto a = [0, 1, 2].staticArray;
```

December 03, 2018
On Monday, 3 December 2018 at 12:19:26 UTC, Dennis wrote:
> On Monday, 3 December 2018 at 10:00:31 UTC, Simen Kjærås wrote:
>> However, it's easy to implement in a library:
>
> It even is in phobos:
> https://dlang.org/phobos/std_array.html#.staticArray
>
> ```
> import std.array: staticArray;
> auto a = [0, 1, 2].staticArray;
> ```

The more you know. Thankies! :)

--
  Simen