하나로 합치기
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 73개 중 50번째.
챌린지
중급편집기에는 이미 완전한 도구 모음이 들어 있습니다. Task 타입, tasks 배열(시작 작업 3개), addTask, completeTask, filterTasks 및 printSummary가 포함되어 있습니다.
io.read()로 계속 한 줄을 읽고 다음 명령을 처리하는 명령 루프를 작성하세요:
add: 제목으로 사용할 한 줄을 더 읽고,addTask를 호출한 다음 정확히Added task {id}: {title}를 출력하세요(반환된 작업의 필드 사용).done: 한 줄을 더 읽고tonumber(...) or 0으로 변환한 다음completeTask를 호출하세요.true를 반환하면Task {id} completed를 출력하고, 그렇지 않으면No task with id {id}를 출력하세요.list: 모든 작업에 대해 완료된 작업이면[x] {title}을 출력하고, 그렇지 않으면[ ] {title}을 출력하세요(공백에 유의).pending:filterTasks를 사용하여 완료되지 않은 모든 작업의 제목을 출력하세요.summary:printSummary(tasks)를 호출하세요.quit: 루프를 중지하세요(io.read()가nil을 반환하는 경우에도 중지).
직접 해보기
-- 매니저의 모든 태스크가 따라야 하는 형태
type Task = {
id: number,
title: string,
done: boolean,
}
-- 태스크 목록: Task 형태의 타입이 지정된 배열
local tasks: {Task} = {
{id = 1, title = "Learn Luau types", done = false},
{id = 2, title = "Build a task manager", done = false},
{id = 3, title = "Write tests", done = true},
}
-- 다음 사용 가능한 id로 타입이 지정된 태스크를 만들어 삽입한다
local function addTask(list: {Task}, title: string): Task
local newTask: Task = {
id = #list + 1,
title = title,
done = false,
}
table.insert(list, newTask)
return newTask
end
-- 주어진 id의 태스크를 완료로 표시하고 성공 여부를 보고한다
local function completeTask(list: {Task}, id: number): boolean
for _, t in ipairs(list) do
if t.id == id then
t.done = true
return true
end
end
return false
end
-- done 플래그가 일치하는 태스크들을 새 {Task}로 수집한다
local function filterTasks(list: {Task}, done: boolean): {Task}
local result: {Task} = {}
for _, t in ipairs(list) do
if t.done == done then
table.insert(result, t)
end
end
return result
end
-- 한 줄짜리 진행 요약을 출력한다
local function printSummary(list: {Task}): ()
local total = #list
local doneCount = 0
for _, t in ipairs(list) do
if t.done then
doneCount = doneCount + 1
end
end
print(`{doneCount}/{total} tasks done`)
end
-- 여기에 코드를 작성하세요
-- 명령 루프: io.read()로 줄을 읽어 "quit"(또는 nil)까지 반복한다.
-- 처리: add (제목 읽기 -> `Added task {id}: {title}`),
-- done (read id -> `Task {id} completed` / `No task with id {id}`),
-- list (`[x] {title}` / `[ ] {title}`),
-- pending (filterTasks를 통한 미완료 태스크의 제목들),
-- summary (printSummary)
Luau 소개의 모든 레슨
7프로젝트: Typed Task Manager
프로젝트: 태스크 형태 정의하기태스크 추가 함수직접 연습해 보세요: 온라인 Lua 컴파일러