J'essaye de me mettre à R6. J'ai implémenté les nombres complexes pour m'exercer.
Code : Tout sélectionner
Complex <- R6Class("Complex",
public = list(
re = NA,
i = NA,
initialize = function(re, i) {
if (!missing(re)) self$re <- re
if (!missing(i)) self$i <- i
self$greet()
},
set_i = function(val) {
self$i <- val
},
greet = function() {
cat(paste0("Hello, my imaginary part is ", self$i, ".\n"))
}
),
active = list(
conjugate = function() {
return(Complex$new(re=self$re, i=-self$i))
})
)
Complex$set("public", "print", overwrite=TRUE,
function(z) {
cat(sprintf("Complex number %f + i %f", self$re, self$i))
invisible(self)
}
)
Quand je fais
Code : Tout sélectionner
z <- Complex$new(1,2)
j'obtiens dans la console
Code : Tout sélectionner
Hello, my imaginary part is 2.
Ensuite quand je fais
Code : Tout sélectionner
z$print()
j'obtiens dans la console
Code : Tout sélectionner
Complex number 1.000000 + i 2.000000
Ensuite quand je fais
Code : Tout sélectionner
> z$conjugate
j'obtiens dans la console
Code : Tout sélectionner
Hello, my imaginary part is -2.
Complex number 1.000000 + i -2.000000
Je trouve ça bizarre comme comportement. Une explicatiion ? Je suis preneur de tout conseil sur R6.