2013-07-04 2 views
3

У меня есть несколько постоянных массивов, и я хотел бы объявить больше констант, составленных из них, но я не могу решить, есть ли разумный способ сделать это.Возможно объединить постоянный массив строки?

const 
    Common_Strings : array [0..1] of string = ('foo','bar'); 
    Extra_Strings : array [0..1] of string = ('some','extra'); 

То, что я хотел бы сделать, это один из них:

Combined_Strings = Common_Strings + Extra_Strings; 
    Combined_Strings = (Common_Strings, Extra_Strings); 

Это выглядит так, как будто он должен работать, но это некрасиво писать и даже уродливее поддерживать, так как мои действительные константы имеют 10 + элементы:

Combined_Strings = (Common_Strings[0], Common_Strings[1], Extra_Strings[0], Extra_Strings[1]); 

Но в порыве глупости, элементы константного массива не обязательно являются постоянными: "[DCC Error] MyFile.pas (89): E2026 постоянное выражение ожидается". Очевидно, если я попытаюсь назначить их, я получаю «[DCC Error] MyFile.pas (854): E2064 Левая сторона не может быть назначена на".

Хочу отметить, что это также невозможно написать: (.. «Постоянное выражение ожидалось» Действительно)

Duplicate_Constant = Common_Strings; 

Есть ли способ, чтобы составить постоянные массивы в более постоянных массивов?

+0

FWIW вы можете передать постоянный массив строки функции, ожидающей параметр «массив строки». Так что что-то работает! –

+1

Возможный дубликат [Возможно ли это объявление объявить постоянный массив, который включает в себя другой постоянный массив?] (Http://stackoverflow.com/questions/246969/is-it-possible-do-declare-a-constant-array-that -includes-another-constant-array) –

+0

Почему бы просто не использовать переменную? –

ответ

4

Типизированные константы могут быть объявлены только в терминах постоянных выражений. Вы пытаетесь объявить типизированную константу в терминах типизированных констант. Поскольку типизированные константы не являются постоянными выражениями, сообщение компилятора, которое вы видите, является конструктивным.

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

В документации по array constants делает это ясно (курсив мой):

Чтобы объявить константу массива, вложить значение элементов массива, разделенных запятыми, в скобках в конце декларации , Эти значения должны быть представлены постоянными выражениями.

+0

Любая идея, почему типизированные константы не являются постоянными выражениями? Я всегда находил это несколько своеобразным ... Разве это вопрос «просто потому, что» или есть какая-то логика, за которой я отсутствую? –

+0

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

+0

А, конечно, записываемые константы. Еще одно из этих противоречий ... :) –