Lua 변수 scope (변수 존재 범위)
로컬 변수는 local을 붙여줍니다. 안 붙어있으면 정의된 이후로 모두 사용이 가능합니다.
C
#include <stdio.h> int main(void) { int a = 0; { a = 50; int a = 100; printf("%d\n",a); } printf("%d\n",a); return 0; }
Lua
a = 0 do a = 50 local a=100 print (a) end print (a)
결과
100 50
Lua function
function의 시작은 function 이름 그리고 마지막에 end로 끝납니다. 만약 중간에 리턴값이 있으면 return 을 사용해도 됩니다.예를 보시죠
C
#include <stdio.h> int sumfunc(int param1,int param2) { return (param1+param2); } int main(void) { printf("%d\n",sumfunc(1,2)); return 0; }
Lua
function sumfunc(param1,param2) return (param1+param2) end print (sumfunc(1,2))
3
function 정의는 사용전에 앞쪽에서 이루어져야 합니다. 위의 예에서 sumfunc가 아래쪽에 위치한다면 오류가 발생합니다.
Lua의 다른 언어와 다른점은 변수를 여러개가 리턴이 가능합니다.
Lua 변수 여러개 리턴
function sumfunc(param1,param2) return (param1+param2),param1,param2 end sum,p1,p2=sumfunc(1,2) print (sum,p1,p2)
결과
3 1 2
Lua table
Lua언어에는 배열이 존재하지 않습니다. 그러면 비슷하게 처리할수 있는 뭔가가 있을겁니다. 그것이 table입니다. 일단 예제를 보시죠
C
#include <stdio.h> int data[]={3,2,1}; int main(void) { int i; for(i=0;i<3;i++){ printf("%d\n",data[i]); } return 0; }
Lua
data={3,2,1} for i=1,3,1 do print (data[i]) end --------------------- data={[0]=3,2,1} for i=0,2,1 do print (data[i]) end
결과
3 2 1
사실 table의 진정한 의미는 map과 비슷합니다. 즉 index가 key가 되고 들어있는 값은 value라고 생각하면 됩니다.
Lua
data={["a"]=3,2,1} print (data["a"])
결과
3
index가 숫자가 아닌경우가 있다면 전체를 순회할만한 방법이 있어야 합니다. 모든 tree를 순회하기 방법이 ipairs랑 pairs 두가지 방법이 있습니다. ipairs를 이용하면 index가 숫자인 부분만 사용합니다.
Lua
data={["a"]=3,2,[5]=1,0} print ("ipairs") for i,v in ipairs(data) do print (i,v) end print ("pairs") for k,v in pairs(data) do print (k,v) end
결과
ipairs 1 2 2 0 pairs 1 2 2 0 a 3 5 1
Lua table or string 길이 구하기 rawlen, #
사용시 주의할점이 있습니다. table에서는 숫자 index의 연속적인 앞쪽 구간만 나오게 됩니다.
Lua
data={3,2,0} print (rawlen(data)) print (#data) data={["a"]=3,2,[5]=1,0} print (rawlen(data)) print (#data) data="stringdata" print (rawlen(data)) print (#data)
결과
3 3 2 2 10 10
Lua print시 개행 관련
lua print는 항상 개행이 포함됩니다. 간혹 개행을 원치않을 경우가 있습니다.이때 사용하는게 io.write 혹은 .. 을 사용하게 됩니다.
Lua
data1=2 data2=3 print(data1..data2) io.write(data1) io.write(data2) io.write("\n") print("end")
결과
23 23 end
Lua string 조작
관련해서 몇개의 함수의 예제를 만들었습니다.string.byte: string 특정 위치의 값을 숫자 형태로 읽어옵니다.
string.char:숫자를 문자 형태로 바꿉니다.
string.find:string에서 특수한 문자를 찾을 때 사용합니다. 이때 사용하는 정규 식은 다음 링크를 참고하시기 바랍니다. http://www.lua.org/manual/5.3/manual.html#6.4.1
string.sub:string에서 일부를 떼어내어 sub string으로 만듭니다.
Lua
--string.byte print("string.byte example") data="101ABCDE" data1=string.byte(data,4) data2=string.byte(data,4,5) data3,data4 = string.byte(data,4,5) print(type(data1),data1) print(type(data2),data2) print(type(data3),data3) print(type(data4),data4) ----------------------------------- --string.char print("string.char example") data1=string.char(65,66,67) print(type(data1),data1) ----------------------------------- --string.find --http://www.lua.org/manual/5.3/manual.html#6.4.1 print("string.find example") data="101ABCDEABCDE" a,b=string.find(data,"ABC",1) print(type(a),a) print(type(b),b) a,b=string.find(data,"ABC",b) print(type(a),a) print(type(b),b) ----------------------------------- --string.sub (s, i [, j]) print("string.sub example") data="101ABCDEABCDE" a,b=string.find(data,"ABC",1) data1=string.sub(data,a,b) print(type(data1),data1)
결과
string.byte example number 65 number 65 number 65 number 66 string.char example string ABC string.find example number 4 number 6 number 9 number 11 string.sub example string ABC
Lua print시 포맷팅
string 함수를 이용하며 기본적으로는 C 언어와 비슷합니다.
Lua
data=string.format("%f %d %i %s %% %c",10.0,10,10,"Str",65) print(data) print(string.format("%f %d %i %s %% %c",10.0,10,10,"Str",65))
결과
10.000000 10 10 Str % A 10.000000 10 10 Str % A
Lua comment 주석
두가지가 있습니다. line comment는 -- 두개입니다. 또하나는 block comment 입니다.--[[ 로 시작하며 ]]-- 로 끝납니다. block comment는 중첩이 가능합니다.
Lua
--comment --[[ print(10) --]] print("end")
결과
end
Lua string to value, value to string
tonumber , tostring 함수를 이용합니다. tonumber 뒤쪽에 진법인자를 사용하지 않으면 10진수로 변환이 됩니다.
Lua
data="101" print(type(data),data) data = tonumber (data) print(type(data),data) data = tonumber (data,"2") print(type(data),data) data = tostring(data) print(type(data),data)
결과
string 101 number 101 number 5 string 5
이전에 쓴글
Lua 입문 ( C언어 비교 ) (1)
http://swlock.blogspot.com/2017/01/lua-c-1.html