On Tuesday, 2 May 2017 at 07:48:35 UTC, ANtlord wrote:
Hello! Is it possible to define associative array on top level
of module?
I try to compile this code and I get message `Error:
non-constant expression ["s":"q", "ss":"qq"]`
import std.stdio;
auto dict = [
"s": "q",
"ss": "qq"
];
void main()
{
writeln(val);
}
I solved it by replacement of word `auto` by `enum`. It is
acceptable for me. But I notice some inconsistency of logic.
When I define simple array I don't get same compile error and
it doesn't lead to define this array using enum. What is key
difference between them in this case?
Thanks. Sorry if my English is not clear.
By the way I notice some strange compile error when I try to
change associatove array defined using enum.
import std.stdio;
enum dict = [
"s": "q",
"ss": "qq"
];
void main()
{
dict["sss"] = "qqq";
}
Compilation of this code returns the error
& el:0x3237ab4 cnt=0 cs=0 & TY* 0x3235794
el:0x3235794 cnt=0 cs=0 call TY* 0x3235744 0x32356f4
el:0x3235744 cnt=0 cs=0 var TYC func _d_assocarrayliteralTX
el:0x32356f4 cnt=0 cs=0 param TYvoid 0x32356a4 0x3235654
el:0x32356a4 cnt=0 cs=0 param TYvoid 0x3234c44 0x3234d34
el:0x3234c44 cnt=0 cs=0 rpair TYucent 0x3234ba4 0x3234bf4
el:0x3234ba4 cnt=0 cs=0 relconst TY* 0+& _TMP8
el:0x3234bf4 cnt=0 cs=0 const TYuns long long 2LL
el:0x3234d34 cnt=0 cs=0 rpair TYucent 0x3234c94 0x3234ce4
el:0x3234c94 cnt=0 cs=0 relconst TY* 0+& _TMP5
el:0x3234ce4 cnt=0 cs=0 const TYuns long long 2LL
el:0x3235654 cnt=0 cs=0 var TY* _D16TypeInfo_HAyaAya6__initZ
Internal error: backend/cgcs.c 352
But when I try to change simple array defined using enum
import std.stdio;
enum arr = [1, 2, 3];
void main()
{
arr ~= 4;
}
I get the clear error `Error: [1, 2, 3] is not an lvalue`