Computed properties

Classes / Properties

new_square <- function(side) {
  structure(list(side = side),
            class = "Square")
}

# Computed property: a function of the object
area <- function(x) UseMethod("area")
area.Square <- function(x) x$side * x$side

# Its setter: a replacement function
`area<-` <- function(x, value) {
  UseMethod("area<-")
}
`area<-.Square` <- function(x, value) {
  x$side <- sqrt(value)
  x
}

square <- new_square(2)
square_area <- area(square)
# square_area = 4

# The same as square <- `area<-`(square, 9)
area(square) <- 9
# square$side = 3

cat("square_area =", square_area, "\n")
cat("square$side =", square$side, "\n")