배열처럼 보이는 일반변수만 존재할 뿐이다.

%itemArray[0], %itemArray[1], %itemArray[2].... 는

사실 상 %itemArray0, %itemArray1, %itemArray2 와 같다.

마찬가지로 이중배열도 %itemArray[0, 0], %itemArray[0, 1] 은

%itemArray0_0, %itemArray0_1 과 같다. (꺽쇠는 제거되고 콤마는 언더바로 바뀐다)

저렇게 쓰는 것이 편할 때도 가끔 있지만,

진정한(?) 배열이 존재하지 않는다는 것이 불편할 때가 더 많다.

배열이 실제로는 같은 prefix 를 가지며 연속된 번호로 연결된

일반변수이므로 배열자체를 리턴할 수가 없기 때문이다.


그래서...

배열을 다루듯이 어떤 오브젝트를 점(.) 으로 접근해서 사용하고 싶다면

이렇게 사용하는 방법이 있다.

%array = new ScriptObject(itemArray);

%array.count = getRecordCount(%linestring);

for ( %i=0; %i < %array.count; %i++ )

{

    %string = getRecord(%linestring, %i);

    %array.val1[%i] = getField(%string, 0);

    %array.val2[%i] = getField(%string, 1);

    %array.val3[%i] = getField(%string, 2);

    %array.val4[%i] = getField(%string, 3);

    %array.val5[%i] = getField(%string, 4);

    %array.val6[%i] = getField(%string, 5);

}

itemArray 라는 스크립트 오브젝트를 만들었다.

%linestring 은 개행(\n 또는 NL)으로 구분된 레코드들의 묶음이며,

각 레코드들은 탭(\t 또는 TAB)으로 구분되어있다.

getField는 하나의 레코드에서 TAB으로 구분된 필드들을 가져오는 함수이다.

저렇게 만든 itemArray 오브젝트를 실제로 사용할 때 는

itemArray.val1[%i]

itemArray.val2[%i]

로 접근해서 사용할 수 있다.

이렇게 함으로써 배열을 리턴할 필요가 없어졌고 어디서든 itemArray 로 접근해서 필드 값을 가져올수있다.

다만, 어디서든 접근할 수 있는 마치 전역변수 같은 오브젝트이므로 단발적으로 필요한 것이라면 쓰고나서

itemArray.delete(); 로 지워주면 더 좋겠다.

그것이 싫다면

function x()

{

   %ret = new ScriptObject();

   %ret.val[1] = 2;

   %ret.val[2] = 1;

   return %ret;

}

$ret =  x();

echo($ret.val[1]);

$ret.delete();

이런 방식으로도 사용할 수있다.




2009/05/22 23:58 2009/05/22 23:58
Posted by ddiamo

트랙백 보낼 주소 : http://ddiamo.net/trackback/50

댓글을 달아주세요

[로그인][오픈아이디란?]

<< PREV : [1] : ... [55] : [56] : [57] : [58] : [59] : [60] : [61] : [62] : [63] : ... [74] : NEXT >>

카테고리

전체 (74)
일기 (37)
감상 (8)
수영 (9)
여행 (11)
IT (9)

달력

«   2010/09   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
Total : 54336
Today : 120 Yesterday : 31