Lua

개요


루아(Lua)는 가벼운 명령형/절차적 언어로, 주로 스크립트로 사용된다.[1]
진짜 문서 화딱지 나네 아 ㅋㅋ
애초에 스크립팅을 주 목적으로 설계됐다고 위키에서도 언급하고 있다.[2]

만들어진 목적이 명확한 편이다.
C언어를 사용하는 조직에서 연산 성능은 이미 충분하니 C언어의 아쉬운 점을 보완하며 같이 사용할 수 있는 언어를 만든 게 시초다.
그래서 메모리 자동 관리, 문자열 동적 처리에 많은 편의성을 넣었다.

자세한 문법과 사용방법은 여기를 참고하자.[3]

vim 설정 만질 때 lua란 게 하도 많이 나오길래 평소에 궁금했는데 이번 기회에 조금이나마 공부해본다.

기능 및 특징

언어로서의 루아는 다음의 특징을 가진다.

자료형

특징 위주로 정리한다.

메타테이블

모든 값은 메타테이블을 가질 수 있다.
여기에는 특정 조건들에 발동되는 함수들이 들어있다.
가령 어떤 변수에 더하기 연산을 하면 이때 __add 필드의 함수가 실행된다.
getmetatable, setmetatable을 통해 조회, 조작 가능.
image.png
요런 것들이 있다.

코루틴 돌리기

다음은 코루틴으로 동시성을 수행하는 코드.

     function foo (a)
       print("foo", a)
       return coroutine.yield(2*a)
     end
     
     co = coroutine.create(function (a,b)
           print("co-body", a, b)
           local r = foo(a+1)
           print("co-body", r)
           local r, s = coroutine.yield(a+b, a-b)
           print("co-body", r, s)
           return b, "end"
     end)
     
     print("main", coroutine.resume(co, 1, 10))
     print("main", coroutine.resume(co, "r"))
     print("main", coroutine.resume(co, "x", "y"))
     print("main", coroutine.resume(co, "x", "y"))

기본 사용법

기본적인 예약어와 연산자이다.
image.png

-- 이건 주석

-- 변수 선언하기
x = 10
-- 인덱스 접근 시 이렇게
t = { "a", "b", "c" }
print(t[1]) 
-- .으로도 가능
person = { name = "John", age = 30 }
print(person.name)  

-- do, end로 지역 실행 구분
x = 10
do
  local x = 5
  print(x)  --> 5
end
print(x) 
-- 
block ::= {stat}

-- 반복문
i = 1
while i <= 5 do
  print(i)
  i = i + 1
end
i = 1
repeat
  print(i)
  i = i + 1
until i > 5

-- 조건문
x = 3

if x == 1 then
  print("one")
elseif x == 2 then
  print("two")
else
  print("other")
end

-- 테이블 만들기
t = { "apple", "banana", "cherry" }
-- 동적 키 가능!
key = "score"
t = { [key] = 100 }

-- 문자열 붙이기
print("Hello" .. " World") 

-- 함수는 일급 객체
f = function()
  print("hi")
end
-- 재귀 돌리려면 선언부터 해야하고 local로 보장
local function f()
  f()  -- 가능
end
-- 멀티 리턴
function f()
  return 1, 2, 3
end
-- 인자를 이렇게 받는 것도 가능
function f(...)
  local x, y = ...
  print(x, y)
end

하위 문서

이름 is-folder index noteType created
Go true - knowledge 2025-04-03
Python true 0 knowledge 2025-05-02
Lua false 4 knowledge 2025-06-07

관련 문서

EXPLAIN - 파생 문서

이름0related생성 일자

Dataview: No results to show for table query.

기타 문서

Z0-연관 knowledge, Z1-트러블슈팅 Z2-디자인,설계, Z3-임시, Z5-프로젝트,아카이브, Z8,9-미분류,미완
이름0코드타입생성 일자

Dataview: No results to show for table query.

참고


  1. https://lua.org/ ↩︎

  2. https://ko.wikipedia.org/wiki/루아_(프로그래밍_언어) ↩︎

  3. https://lua.org/manual/5.4/ ↩︎