노력과 삽질 퇴적물
루아: 기초정리(2) 본문
* 윈도우10(64bit), Lua 5.3.5.기반입니다.
루아: 기초정리(3)
1. 자료형과 변수
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
|
--scope가 global로 지정된 변수
gContext = nil; --루아식 null
gVal = -1;
gTblList1, gTblList2 = {}, nil; --루아에 있는 득특한 자료형. 리스트와 테이블을 오감.
--scope가 local로 지정된 변수
local lContext = nil;
local lVal = -1;
local lTblList1, lTblList2 = {}, nil;
gContext = 'ANALOG-GREEN' .. ' ' .. 'this blog is doodle';
print('1) gContext=' .. gContext); --[..] String basic append
print('2) gContext=', gContext);
gContext = '2019';
gVal = tonumber(gContext)+6;
print('tonumber(gContext)+6=' .. gVal);
print('(before)gTblList1=' .. #gTblList1);
--print('(before)gTblList2=' .. #gTblList2); --null error
gTblList1[1] = 'Hello';
gTblList1[2] = ', ';
gTblList1[3] = 'World!';
gTblList2 = {'Saluton', '~', 'Mondo!'};
print('(after)gTblList1=' .. #gTblList1 .. ', [idx.0]='..gTblList1[1]);
print('(after)gTblList2=' .. #gTblList2 .. ', [idx.0]='..gTblList2[1]);
|
cs |
--실행결과. 1) gContext=ANALOG-GREEN this blog is doodle 2) gContext= ANALOG-GREEN this blog is doodle tonumber(gContext)+6=2025 (before)gTblList1=0 (after)gTblList1=3, [idx.0]=Hello (after)gTblList2=3, [idx.0]=Saluton |
2. 기본 제어
1) 연산자, 산술
1
2
3
4
5
6
7
8
9
10
11
12
|
gVal1, gVal2 = 2019, 6;
print('gVal1+gVal2=' .. gVal1+gVal2);
print('gVal1-gVal2=' .. gVal1-gVal2);
print('gVal1*gVal2=' .. gVal1*gVal2);
print('gVal1/gVal2=' .. gVal1/gVal2);
print('gVal1/0=' .. gVal1/0);
print('gVal1%gVal2=' .. gVal1%gVal2);
--print('gVal1%0=' .. gVal1%0); --ERROR
print('0%gVal2=' .. 0%gVal2);
print('gVal1^gVal2=' .. gVal1^gVal2);
print('-gVal1=' .. -gVal1); -- newVal == prevVal*-1
|
cs |
--실행결과. gVal1+gVal2=2025 gVal1-gVal2=2013 gVal1*gVal2=12114 gVal1/gVal2=336.5 gVal1/0=inf gVal1%gVal2=3 0%gVal2=0 gVal1^gVal2=6.773574528902e+019 -gVal1=-2019 |
2) 연산자
> 주의사항. ++나 --같은 축약연산자가 없습니다.
다른 언어에서 [A!=B]인 비교연산자 루아에서는 [A~=B]이고,
|| -> or
&& -> and
! -> not인것만 주의하면 다른 언어의 연산자와 비슷합니다.
만약, 루아로 프로그래밍 언어자체를 처음 시도하시는거면 아래의 페이지 정독 추천드립니다.
Lua Operators
3) 루프문
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
|
local looEndIdx = 5;
local addVal = 0;
local loopResult1 = 0;
--basic loop type
for idx = 0, looEndIdx do --loop start~end
loopResult1 = loopResult1+idx;
end
print( 'loopResult1=' .. loopResult1 );
local loopResult2 = 0;
addVal = 0;
--repeat loop type
repeat
addVal = addVal+1;
loopResult2 = loopResult2+addVal;
until( addVal >= looEndIdx ) --loop end condition
print( 'loopResult2=' .. loopResult2 );
local loopResult3 = 0;
addVal = 0;
--while loop type
while( addVal < looEndIdx ) --loop run condition
do
addVal = addVal+1;
loopResult3 = loopResult3+addVal;
end
print( 'loopResult3=' .. loopResult3 );
|
cs |
--실행결과 loopResult1=15 loopResult2=15 loopResult3=15 |
4) 조건문&제어문
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
local msg = nil;
local loopLeng = 10;
for idx=0, loopLeng do
if idx==0 then
print('idx==0');
elseif idx==1 then
msg = 'ANALOG-GREEN';
print('idx==1 msg=' .. msg);
elseif (idx==2) then
print('(idx==2)');
elseif idx==3 then
msg = 'loop exit';
print('idx==3 msg=' .. msg);
break;
elseif idx==4 then
msg = 'never reach';
print('idx==4 msg=' .. msg);
end
end
|
cs |
--실행결과 idx==0 idx==1 msg=ANALOG-GREEN (idx==2) idx==3 msg=loop exit |
3. 함수와 모듈
1) 함수 반환값
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
function DoPrint(argFuncName, argContext)
--return 이 없는 함수형태
print('['..argFuncName..'] ' .. argContext);
end
function GetAdd(arg1, arg2)
--return 이 있는 함수형태
result = arg1+arg2;
DoPrint('GetAdd', result);
return result;
end
local valByFuncReturn = GetAdd(2019, 6);
|
cs |
--실행결과 [GetAdd] 2025 |
2) 함수인자
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
31
32
33
34
35
36
37
38
|
function FormA() --basic function form 1
print('called FormA');
end
function FormB(arg1, arg2) --basic function form 1
local result = arg1+arg2;
print('called FormB, result=' .. result);
end
gFormC = function(arg1, arg2)
--익명함수(Anonymous function)와 유사.
--함수를 변수처럼 사용하는 방식이기도.
print('called FormC(alike Anonymous func.), arg1='..arg1 .. ', arg2='..arg2);
end
function FormD(arg1, arg2, argFunc) --unusual function form in LUA (2)
local result = arg1+arg2;
print('called FormD');
print('-------------');
FormA();
argFunc(arg1, arg2);
print('-------------');
end
function FormE(...)
--가변 함수 인자
local arg = {...};
local result = #arg;
print('called FormE, result=' .. result);
end
FormD(2019, 6, gFormC);
FormE();
FormE(2019, 6, 6);
FormE("A", "B", "C", "E");
|
cs |
called FormD ------------- called FormA called FormC(alike Anonymous func.), arg1=2019, arg2=6 ------------- called FormE, result=0 called FormE, result=3 called FormE, result=4 |
4. 에러처리
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
31
32
33
34
35
36
37
38
39
|
function Something()
local param1 = 2019;
local param2 = 6;
return param1 * param2;
end
function SomethingError()
local param1 = 2019;
local param2 = "SalutonMondo!";
return param1 * param2;
end
function ErrorManager(argErr)
print('argErr: ' .. argErr);
end
if pcall(Something) then
print("[pcall] Something, ERROR X");
else
print("[pcall] Something, ERROR O");
end
--error check form 1
if pcall(SomethingError) then
print("[pcall] SomethingError, ERROR X");
else
print("[pcall] SomethingError, ERROR O");
end
--error check form 2
local response = nil;
response = xpcall( Something, ErrorManager );
print('[xpcall] Something, response:', response);
response = xpcall( SomethingError, ErrorManager );
print('[xpcall] SomethingError, response:', response);
|
cs |
--실행결과 [pcall] Something, ERROR X [pcall] SomethingError, ERROR O [xpcall] Something, response: true argErr: d:\Projects-vsCode\testLua\ErrManager.lua:12: attempt to perform arithmetic on a string value (local 'param2') [xpcall] SomethingError, response: false |
기타. 참조자료
기타. 변경이력
일자 |
변경이력 |
2019-06-06 |
초안. |
'📂기초 및 세팅 note > 언어. 스크립트 계열' 카테고리의 다른 글
JS ajax: jsonp (0) | 2019.10.27 |
---|---|
루아: 기초정리(1) (0) | 2019.05.26 |
HTML5: cocos2d-js 기초 (1) (0) | 2018.05.23 |
파이썬3: 기초정리(2) (0) | 2018.05.18 |
파이썬3: 기초정리(1) (0) | 2018.05.14 |