복습 - 작업 큐
Coddy R 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 41번째.
챌린지
중급두 개의 Reference Class를 사용하여 작업 큐를 만드세요. 두 정의 모두 suppressMessages()로 감싸져 있습니다.
Task(Task.R에 있음):title,priority(numeric),done(logical) 필드;initialize은done이 지정되지 않았을 때FALSE로 설정합니다.label()은 완료된 작업에 대해[x] fix (3)을, 그렇지 않으면[ ] fix (3)을 반환합니다.TaskQueue(TaskQueue.R에 있음):tasks필드(list);add(title, priority)는 새Task를 추가하고invisible(.self)를 반환합니다.next_task()는 우선순위가 가장 높은 미완료 작업의 제목(동률이면 먼저 추가된 작업)을 반환하며, 해당 작업이 없으면nothing을 반환합니다.complete(title)은 해당 제목을 가진 첫 번째 미완료 작업을 완료 상태로 표시하고TRUE를 반환하며, 해당 작업이 없으면FALSE를 반환합니다.report()는 추가된 순서대로 작업별 레이블 하나씩을 반환한 다음open: 2를 반환합니다.
제공된 코드는 add fix 3, next, done fix를 읽은 다음, 연결된 하나의 호출로 작업 두 개를 추가하고 보고서를 출력합니다.
코드는 Task.R과 TaskQueue.R에 작성합니다. main.R에는 제공된 입력/출력 코드가 들어 있으며 편집할 수 없습니다.
직접 해보기
source("Task.R")
source("TaskQueue.R")
# 제공된 입출력 코드: 있는 그대로 유지하세요
input <- suppressWarnings(readLines(file("stdin")))
q <- TaskQueue$new()
for (line in input) {
p <- strsplit(line, " ")[[1]]
if (p[1] == "add") {
q$add(p[2], as.numeric(p[3]))
} else if (p[1] == "next") {
cat("next: ", q$next_task(), "\n", sep = "")
} else if (p[1] == "done") {
cat(if (q$complete(p[2])) "completed " else "no open task ", p[2], "\n", sep = "")
}
}
q$add("late", 1)$add("later", 1)
writeLines(q$report())
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 R 컴파일러