목차

언어 퀵 요약

일반

-- 한줄 주석
 
--[[
블록 주석
]]
 
-- NULL
local v_nil = nil
 
-- 변수
foo = 3
 
-- 함수 호출
print(foo)
 
print("테스트");
-- ';'을 붙여도 되고 안붙여도 되고
 
v1 = 10			-- 
local v2 = 12	-- local
print("v1,v2: " .. v1,v2)		-- 프린트 함수는 무한 입력?
 
a = "Lua"
do
	print("1: " .. a)
	local b = "Zua"
	c = "ActionScript"
end
print("2: " .. a)
print("3: " .. tostring(b))
print("4: " .. c)
 
 
print(type("HelloWorld"))
print(type(10.4 * 3))
print(type(print))
 
--[[ type
	- nil
	- true, false
	- string
	- number
]]
 
--[[ 비교 연산자
	> , < >=, <= , ==, 
	~= (같지않다.)
]]
 
--[[ 논리 연산자
	and, or, not
]]
 
--[[ 그외 연산자
	문자열연결 : "ㅁ" .. "B"
	테이블문자열 길이 변환: #
]]
 
-- if 을 사용하려면
math.randomseed(os.time()) -- 어쩌다 한번 해주는게 좋지
local rnd = math.random(1,100)
if rnd % 2 == 0 then
	print(rnd .. ": 짝")
else
	print(rnd .. ": 홀")
end
 
-- 반복문 for
for i = 10, 1, -1 do -- 1, 10, 1 == 변수, 조건, 증감연산자
	print(i)
end
 
-- 반복문 while (선검사 후실행)
local i2 = 1
while i2 <= 5 do
	print(i2)
	i2 = i2 + 1
end
 
-- 반복문 repeat (선실행 후검사)
local i3 = true
repeat
	local rnd = math.random(1,100)
	print("CONT: " .. rnd)	
	if rnd < 50 then 
		i3 = false
	end
until i3 == false
 
-------------------------------------------------------------------------------
 
-- 함수
function add1(a,b) 
	return a+b;
end
-- 함수 : local, global 있다
local function add2(a,b)
	return a+b
end
-- 함수 : 변수에 할당 가능
local fn_add3 = function(a, b)
	return a^b
end
print(fn_add3(10, 2))
-- 함수 두개 이상 값 돌려줄 수 있다. 각자 타입이 달라도 된다.
 
 
-------------------------------------------------------------------------------
-- 모듈1
 
-- string 모듈
print(string.byte("A")) -- to 65
print(string.char(65))
print(string.find("Hello Corona App", "Coro")) -- 7, 10 -- 시작과 끝을 알아낸다
-- gmatch(string, "format") : 문자열에서 포맷과 일치되는 것을 찾는다
-- string.gsub(스트링, "찾는스트링", "바꿀스트링")
-- string.gsub(스트링, "찾는스트링", "바꿀스트링", 몇번째것을 바꿀까?)
 
-- math
-- os
--os.exit() -- 종료
 
-- 프로퍼티와 메소드에 접근할 때 
-- . 연산자를 이용합니다. 
-- Lua의 경우 프로퍼티는 . 로 접근하지만 메소드는 : 을 이용합니다.
 
-------------------------------------------------------------------------------
-- 모듈2
 
local ControlMyCar = require "ControlMyCar"
local car1 = ... -- '...' 이거 뭐지?
ControlMyCar.connect(car1)
ControlMyCar.lockDoors(false)
 
 
-------------------------------------------------------------------------------
-- 코루틴
 
-- 코루틴은 쓰레드가 아니다. 아래 코드를 실행하면 fn1()만 무한 실행된다.
--[[
local _b = true
local function fn1()
	while _b do
		print("OK")
	end
	print("END")
end
local function fn2()
	_b = false
end
local co1 = coroutine.create(fn1)
local co2 = coroutine.create(fn2)
coroutine.resume(co1)
coroutine.resume(co2)
]]
 
-- yield로 현재루틴을 잠시 중지하고 다른 코루틴이 실행 되도록 한다. 
local _b = true
local function fn1()
	while _b do
		print("OK")
		coroutine.yield()
	end
	print("END")
end
local function fn2()
	_b = false
end
local co1 = coroutine.create(fn1)
local co2 = coroutine.create(fn2)
coroutine.resume(co1)
coroutine.resume(co2)
-- yield는 실행을 그 지점에서 종료하는 것, 뒤부분을 실행하려면 resume()를 추가로 호출해야한다.
coroutine.resume(co1)
 
-------------------------------------------------------------------------------
-- 테이블: 배열,해시,어레이의 짬뽕
 
local _table = {}
_table[1] = 1
_table["five"] = 5
print(_table[1] + _table["five"])
 
-- 숫자, 문자, 함수, 모듈, 객체 모두 저장가능
local function temp_fn_1()
	print("Did you call me?")
end
local _tbl2 = {a=3, b="String", c=temp_fn_1, d=math}
print(tostring(_tbl2.d.random()))
print(_tbl2.c() )
--print(_tbl2.c() .. _tbl2.d.random())
 
local _tbl3 = {3,1,100,5,7,9}
-- table.concat() 요소연결
print(table.concat(_tbl3,'--'))
-- table.copy() 테이블 합치기
-- table.indexOf()
table.sort(_tbl3)
print(table.concat(_tbl3,'--'))
-- table.remove
table.remove(_tbl3, 2)
print(table.concat(_tbl3,'--'))
--print(table.indexOf(_tbl3, 2)) indexOf는 사라진듯?
 
-------------------------------------------------------------------------------
 
-- API
--[[
tostring()
tonumber()
pairs() 테이블을 key, value 형태로 되돌려주는 함수
ipairs() 키가 숫자로 된것만 리턴하는 
]]

커스텀모듈

-- 별도 파일을 만들어서,
 
-- 이렇게 시작
local Class = {}
 
Class.car = nil
 
Class.connect = function(car)
Class.car = car
print("Class.Connect")
end
 
Class.lockDoors = function(isLock)
print("Class.lockDoors")
end
 
Class.ignition = function(isOn)
print("Class.ignition")
end
 
Class.move = function(isForward, speed)
print("Class.move")
end
 
Class.handling = function(isLeft, degree)
print("Class.handling")
end
 
return Class

쓸때는

local ControlMyCar = require("ControlMyCar")
-- ControlMyCar.lua 파일 있음
local car = ...
ControlMyCar.connect(car)

다른 폴더 밑에 두었다면, my_custom 폴더에 있다면

local ControlMyCar = require "my_custom.ControlMyCar"