new_logger <- function() {
structure(list(), class = "Logger")
}
print_max5 <- function(logger, data) {
UseMethod("print_max5")
}
print_max5.Logger <- function(logger, data) {
# The argument is a local copy
data <- substr(data, 1, 5)
cat(data, "\n")
}
logger <- new_logger()
data <- "1234567"
print_max5(logger, data)
# prints "12345"
# The caller's string is unchanged
cat("data =", data, "\n")
# data = 1234567
# substr() never fails past the end
print_max5(logger, "123")
# prints "123"