Q&A

  • Variant를 다른 타입에 대입시 에러가 안 뜨나요?
어느 프로그램 소스에 보니까...variant 형으로 배열을 만들어서 사용한것을 보고

테스트를 해보다가 궁금한 점이 있어서 질문을 드립니다.

variant는 어떤 형태의 자료도 입력이 가능하다고 되어있더라구요.

실제도 그런것 같구요.

그리고 실제 숫자(정수나 실수)를 입력한후 연산도 되구요.

그런데 아래소스에서 처럼(구냥 제가 테스트해본거지 별 내용없습니다.) 연산도 되는데



memo1.lines.add(a[2]);

이부분이거든요. 분명 a[2]에는 실수형 값을 입력했는데.... 아무 에러없이 출력이 되더군요. 그리고 이부분을 memo1.lines.add(floattostr(a[2])) 해도 이상없이 출력이 되구요. lines.add(Tstring)인데 왜 에러가 안뜨는지 궁금하네요.

궁금한것은 꼭 알고싶은게 저라서... 사소한것이라고 생각치마시고요. 알려주시면 고맙겠습니다.





procedure TForm1.Button1Click(Sender: TObject);

var

a:variant;

i:real;

begin

a:=vararrayCreate([1,4], varvariant);

a[1]:='임형호';

a[2]:=282.23;

a[3]:=true;

a[4]:=34;



i:=a[2]+a[4];



button1.caption:=floattostr(i);



memo1.clear;

memo1.lines.add(a[1]);

memo1.lines.add(a[2]);



if a[3] then

memo1.lines.add('true')

else

memo1.lines.add('false');





1  COMMENTS
  • Profile
    최용일 2000.09.02 04:14
    안녕하세요. 최용일입니다.



    Variant는 말 그대로 입니다. 형에 따라 바뀝니다. TMemo.Lines.Add에 들어가는게



    스트링형이죠. 그러니까 정수나 실수가 자동으로 형변환되어서 스트링문자로 바뀌어서



    들어가는 것입니다. 일반적인 정수나 실수를 사용한다면 IntToStr/FloatToStr함수를



    써서 수동으로 형변환을 해주어야 하지만 Variant는 그 특성상 자동으로 바뀝니다.



    ^^ 항상 즐코하세요.



    임형호 wrote:

    > 어느 프로그램 소스에 보니까...variant 형으로 배열을 만들어서 사용한것을 보고

    > 테스트를 해보다가 궁금한 점이 있어서 질문을 드립니다.

    > variant는 어떤 형태의 자료도 입력이 가능하다고 되어있더라구요.

    > 실제도 그런것 같구요.

    > 그리고 실제 숫자(정수나 실수)를 입력한후 연산도 되구요.

    > 그런데 아래소스에서 처럼(구냥 제가 테스트해본거지 별 내용없습니다.) 연산도 되는데

    >

    > memo1.lines.add(a[2]);

    > 이부분이거든요. 분명 a[2]에는 실수형 값을 입력했는데.... 아무 에러없이 출력이 되더군요. 그리고 이부분을 memo1.lines.add(floattostr(a[2])) 해도 이상없이 출력이 되구요. lines.add(Tstring)인데 왜 에러가 안뜨는지 궁금하네요.

    > 궁금한것은 꼭 알고싶은게 저라서... 사소한것이라고 생각치마시고요. 알려주시면 고맙겠습니다.

    >

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > a:variant;

    > i:real;

    > begin

    > a:=vararrayCreate([1,4], varvariant);

    > a[1]:='임형호';

    > a[2]:=282.23;

    > a[3]:=true;

    > a[4]:=34;

    >

    > i:=a[2]+a[4];

    >

    > button1.caption:=floattostr(i);

    >

    > memo1.clear;

    > memo1.lines.add(a[1]);

    > memo1.lines.add(a[2]);

    >

    > if a[3] then

    > memo1.lines.add('true')

    > else

    > memo1.lines.add('false');

    >

    >