我在R6类中创建一个活动绑定来打印一个私有元素。
当我调用print(private$privMail)
时,结果会打印两次,但仅限于私有元素,而不是公开。
如果我没有使用print
,没问题。
这是一个代表:
team <- R6::R6Class("Team",
public = list( mail = "colin@thinkr.fr"),
private = list(privMail = "colin@thinkr.fr"),
active = list(
MailPriv = function(){ print(private$privMail) },
Mail = function(){ print(self$mail) }
)
)
a <- team$new()
a$MailPriv
#> [1] "colin@thinkr.fr"
#> [1] "colin@thinkr.fr"
a$Mail
#> [1] "colin@thinkr.fr"
#> [1] "colin@thinkr.fr"
#Without using print
team2 <- R6::R6Class("Team",
public = list( mail = "colin@thinkr.fr"),
private = list(privMail = "colin@thinkr.fr"),
active = list(
MailPriv = function(){ private$privMail },
Mail = function(){self$mail }
)
)
abis <- team2$new()
abis$MailPriv
#> [1] "colin@thinkr.fr"
abis$Mail
#> [1] "colin@thinkr.fr"
devtools::session_info()
#> Session info -------------------------------------------------------------
#> setting value
#> version R version 3.4.4 (2018-03-15)
#> system x86_64, darwin15.6.0
#> ui X11
#> language (EN)
#> collate fr_FR.UTF-8
#> tz Europe/Paris
#> date 2018-05-24
#> Packages -----------------------------------------------------------------
#> package * version date source
#> backports 1.1.2 2017-12-13 CRAN (R 3.4.3)
#> base * 3.4.4 2018-03-15 local
#> compiler 3.4.4 2018-03-15 local
#> datasets * 3.4.4 2018-03-15 local
#> devtools 1.13.5 2018-02-18 CRAN (R 3.4.3)
#> digest 0.6.15 2018-01-28 CRAN (R 3.4.3)
#> evaluate 0.10.1 2017-06-24 CRAN (R 3.4.1)
#> graphics * 3.4.4 2018-03-15 local
#> grDevices * 3.4.4 2018-03-15 local
#> htmltools 0.3.6 2017-04-28 CRAN (R 3.4.0)
#> knitr 1.20 2018-02-20 CRAN (R 3.4.3)
#> magrittr 1.5 2014-11-22 CRAN (R 3.4.0)
#> memoise 1.1.0 2017-04-21 CRAN (R 3.4.0)
#> methods * 3.4.4 2018-03-15 local
#> R6 2.2.2 2017-06-17 CRAN (R 3.4.0)
#> Rcpp 0.12.16 2018-03-13 CRAN (R 3.4.4)
#> rmarkdown 1.9 2018-03-01 CRAN (R 3.4.3)
#> rprojroot 1.3-2 2018-01-03 CRAN (R 3.4.3)
#> stats * 3.4.4 2018-03-15 local
#> stringi 1.1.7 2018-03-12 CRAN (R 3.4.4)
#> stringr 1.3.0 2018-02-19 CRAN (R 3.4.3)
#> tools 3.4.4 2018-03-15 local
#> utils * 3.4.4 2018-03-15 local
#> withr 2.1.2 2018-04-13 Github (jimhester/withr@79d7b0d)
#> yaml 2.1.18 2018-03-08 CRAN (R 3.4.4)
准确地说,我的问题不在于如何解决这个问题(我可以通过删除打印来完成,就像在第二节中完成的那样),但是关于为什么使用print()打印两次内容。< / p>
答案 0 :(得分:2)
print
返回打印的值,尝试修改此版本:
team <- R6::R6Class("Team",
public = list( mail = "colin@thinkr.fr"),
private = list(privMail = "colin@thinkr.fr"),
active = list(
MailPriv = function(){ print(private$privMail); "hi!" },
Mail = function(){ print(self$mail) }
)
)
a <- team$new()
> a$MailPriv
[1] "colin@thinkr.fr"
[1] "hi!"
显然主动绑定不支持invisible
,
所以将"hi!"
更改为invisible()
无法提供帮助。
答案 1 :(得分:1)
我不确定我完全理解你的问题,但我认为你有print
的一个印刷品和print
的退回元素的印刷品。
尝试例如(print(1))
。
所以,基本上,我会在这里删除print
。