## ------------------------------------------------------------------------
library(aoos)
Person <- defineClass("Person", {
personName <- ""
init <- function(name) {
self$personName(name)
self$greet()
}
greet <- function() {
cat(paste0("Hello, my name is ", self$personName(), ".\n"))
}
})
## ------------------------------------------------------------------------
ann <- Person("Ann")
ann
ann$personName()
ann$personName("not Ann")
ann$greet()
## ---- eval=FALSE---------------------------------------------------------
# Person <- defineClass("Person", {
#
# .personName <- "" # .personName is private
#
# init <- function(name) {
# self$.personName <- name # option 1
# .personName <<- name # option 2
# greet()
# }
#
# greet <- public(function() {
# cat(paste0("Hello, my name is ", .personName, ".\n")) # before: personName()
# })
# })
## ------------------------------------------------------------------------
new("Person", "Ann")
## ------------------------------------------------------------------------
Queue <- defineClass("Queue", {
.queue <- list()
init <- function(...) {
for (item in list(...)) self$add(item)
}
add <- function(x) {
.queue <<- c(.queue, list(x))
invisible(self)
}
remove <- function() {
if (queueIsEmpty()) return(NULL)
head <- .queue[[1]]
.queue <<- .queue[-1]
head
}
queueIsEmpty <- function() length(.queue) == 0
})
HistoryQueue <- defineClass("HistoryQueue", contains = "Queue", {
.head_idx <- 0
remove <- function() {
if ((length(.queue) - .head_idx) == 0) return(NULL)
self$.head_idx <- .head_idx + 1
.queue[[.head_idx]]
}
show <- function() {
cat("Next item is at index", .head_idx + 1, "\n")
for (i in seq_along(.queue)) {
cat(i, ": ", .queue[[i]], "\n", sep = "")
}
}
})
q <- Queue(5, 6, "foo")
q$remove()
q
hq <- HistoryQueue(5, 6, "foo")
hq
hq$show()
hq$remove()
hq$show()
hq$remove()
## ------------------------------------------------------------------------
setMethod("show", "HistoryQueue", function(object) {
object$show()
})
hq
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.