2013-07-04 1 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 오류] MyFile.pas가 (89) 식의 정수 E2026 예상". 분명히 그들에게 할당하려고하면 "[DCC 오류] 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

아, 물론 쓰기 가능한 상수. 그 모순 중 또 다른 하나는 ... :) –