0
我使用R6類中的活動綁定來檢查賦值給字段之前的值。我想我可以使用閉包來生成如下的綁定,但這不起作用。使用閉包來生成R6綁定
綁定不按照我期望的方式進行評估(根本就是?),因爲錯誤顯示了封閉的參數name
。我錯過了什麼?
library(R6)
library(pryr)
# pass a field name to create its binding
generate_binding <- function(name) {
function(value) {
if (!missing(value) && length(value) > 0) {
private$name <- value
}
private$name
}
}
bind_x = generate_binding(x_)
# created as intended:
unenclose(bind_x)
# function (value)
# {
# if (!missing(value) && length(value) > 0) {
# private$x_ <- value
# }
# private$x_
# }
MyClass <- R6::R6Class("MyClass",
private = list(
x_ = NULL
),
active = list(
x = bind_x
),
)
my_class_instance <- MyClass$new()
my_class_instance$x <- "foo"
# Error in private$name <- value :
# cannot add bindings to a locked environment
這是了不起的。謝謝。 – effel