2013-11-24 3 views
0

Есть ли способ создать неизменяемый ассоциативный массив в D? Кажется, что нет способа определить ассоциативный массив; только объявить один.Как создать неизменяемый ассоциативный массив в D

immutable char[][char[]] = ["testk" = "testv", "testk2" = "testv2"]; 
+0

Вам действительно нужно использовать char []? В чем смысл? – DejanLekic

+0

Строки @DejanLekic могут быть изменены. Сделать их неизменными бьет цель. (+ это вызвало некоторые ошибки для меня раньше: http://stackoverflow.com/questions/20168136/linker-error-cannot-link-d16typeinfo-hayayaa6-initz) –

+0

Не обижайтесь, но похоже, что вы не понимаете рассуждений за тем, чтобы строки неизменяемы ... Даже Java имеет String как неизменный тип сейчас! :) Я вижу, что вы программист JavaScript - знаете ли вы, что даже строки JavaScript теперь неизменяемы!?!? Каждая операция в строке ECMAScript приводит к новой строке. – DejanLekic

ответ

3

Вы должны использовать «:» вместо «=».

immutable (char[][char[]]) = ["testk": "testv", "testk2": "testv2"]; 
3

Ну, вы можете определить значения неизменяемого ассоциативного массива внутри конструктора.

Ex.

static immutable int[string] myArray; 

static this() 
{ 
    myArray["hi"] = 100; 
} 

Сначала вы можете использовать изменяемый буфер и присвоить его неизменяемому буферу.

+0

Я предполагаю, что это означает, что вы не можете создать перечисление ассоциативного массива? –

+3

Вы можете, но это, как правило, плохая идея из-за природы перечисления, поскольку она создаст новую копию массива для каждого упоминания перечисления в коде. –