문법 · Lua · beginner

Lua 기초: 변수·테이블·문자열

Lua 5.4에서 nil, 테이블이 배열·맵을 겸하는 방식.

배우기 · Lua 문법 · 14분 · 1/7 · lua · 기초

이 트랙 목차 (7)
  1. 1. Lua 기초: 변수·테이블·문자열
  2. 2. Lua 제어·반복·함수
  3. 3. 테이블 깊게: 배열부·해시부·ipairs
  4. 4. 문자열·패턴: match, gmatch, gsub
  5. 5. 에러와 pcall: 실패를 값으로
  6. 6. 모듈과 require 감각
  7. 7. 숫자 for와 인덱스 함정

채점 계약

Lua 문제도 보통 solve(input) 형태로 문자열을 받아 문자열을 반환합니다 (환경 설명 따름).

function solve(input)
  local a, b = input:match("(%S+)%s+(%S+)")
  return tostring(tonumber(a) + tonumber(b))
end

값과 nil

nil은 값이 없음입니다. falsenil만 falsy이고, 0''는 truthy입니다 (JS와 다름).

테이블

배열과 맵이 모두 테이블입니다. 배열 인덱스는 1부터입니다.

local arr = {10, 20, 30}
print(arr[1])  -- 10

local map = {a = 1, b = 2}
print(map.a)
map['c'] = 3

길이 연산자 #arr는 구멍(nil 구멍)이 있으면 예상과 다를 수 있습니다.

문자열

local s = input:gsub("^%s+", ""):gsub("%s+$", "")
local parts = {}
for token in string.gmatch(s, "%S+") do
  parts[#parts + 1] = token
end

.. 가 문자열 연결입니다. +는 숫자용.

비교

== / ~= (같지 않음). !=가 아닙니다.

왜 1-based인가

Lua 배열부 전통입니다.
for i = 1, #t가 자연스럽습니다.
JS/Python 코드를 옮길 때 i-1 실수를 가장 많이 합니다.

문자열 패턴

for w in input:gmatch("%S+") do
  -- 단어
end

%s 공백, %d 숫자, . 任意 한 글자 (정규식과 비슷한 패턴).

table.concat으로 출력

return table.concat(parts, "\n")

관련 짧은 원리

관련 문제