【发布时间】:2020-06-10 22:53:17
【问题描述】:
我的工作环境:
R version: 3.6.3 (64 bits)
OS: Windows 10 (64 bits)
我正在研究 Hadley Wickham 的高级 R 书籍中的以下练习:
创建一个银行账户 R6 类来存储余额并允许您 存款和取款。
这是我创建的类
library(R6)
BankAccount <- R6Class(
classname = "BankAccount",
public = list(
initialize = function(first_name,
last_name,
email,
balance
) {
stopifnot(balance >= 0)
self$balance <- balance
self$email <- email
self$first_name <- first_name
self$last_name <- last_name
},
deposit = function(amount) {
stopifnot(amount > 0)
self$balance <- self$balance + amount
invisible(self)
},
withdraw = function(amount) {
stopifnot(amount > 0, self$balance - amount > 0)
self$balance = self$balance - amount
invisible(self)
},
print = function() {
cat(
"first name: ",
self$first_name,
"\n",
"last name: ",
self$last_name,
"\n",
"email : ",
self$email,
"\n",
"current balance : ",
self$balance,
"\n"
)
invisible(self)
}
)
)
my_bank_account <- BankAccount$new(
first_name = "test_firstname",
last_name = "test_lastname",
email = "testemail@somedomain.com",
balance = 140
)
上述代码在执行时会引发以下错误:
Error in self$balance <- balance (from #10) :
cannot add bindings to a locked environment
>
我无法理解班级的初始化方法中的问题。我的代码中的初始化函数有什么问题?
【问题讨论】:
-
这里有来自
shiny应用程序的此错误的任何人,以下答案很有帮助:TLDR 为您的reactiveValues定义您的字段,例如vals_data <- reactiveValues(Data = NULL)