Skip to content

Instantly share code, notes, and snippets.

@jmbarbone
Last active October 9, 2023 20:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jmbarbone/b86fa895fc994fcb2886f592990a6a5b to your computer and use it in GitHub Desktop.
Save jmbarbone/b86fa895fc994fcb2886f592990a6a5b to your computer and use it in GitHub Desktop.
library(S7)

# problem -----------------------------------------------------------------

class_a <- new_class("class_a", properties = list(x = class_character))
class_b <- new_class(
  "class_b",
  properties = list(class_a = class_a),
  constructor = function(class_a = class_a()) {
    new_object(S7_object(), class_a = class_a)
  }
)
try(class_b())
#> Error in new_object(S7_object(), class_a = class_a) : 
#>   promise already under evaluation: recursive default argument reference or earlier problems?


# alias -------------------------------------------------------------------

class_a <- new_class("class_a", properties = list(x = class_character))
.class_a <- function() class_a()
class_b <- new_class(
  "class_b",
  properties = list(class_a = class_a),
  constructor = function(class_a = .class_a()) {
    new_object(S7_object(), class_a = class_a)
  }
)
class_b()
#> <class_b>
#>  @ class_a: <class_a>
#>  .. @ x: chr(0)


# get() -------------------------------------------------------------------

class_a <- new_class("class_a", properties = list(x = class_character))
class_b <- new_class(
  "class_b",
  properties = list(class_a = class_a),
  constructor = function(class_a = get("class_a", 1)()) {
    new_object(S7_object(), class_a = class_a)
  }
)
class_b()
#> <class_b>
#>  @ class_a: <class_a>
#>  .. @ x: chr(0)

Created on 2023-10-09 with reprex v2.0.2.9000

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment