====== 언어 퀵 요약 ======
==== 일반 ====
-- 한줄 주석
--[[
블록 주석
]]
-- 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"