Voir ?substring
.
x <- 'hello stackoverflow'
substring(x, 1, 1)
substring(x, 2)
L'idée de disposer d'une méthode pop
renvoyant une valeur et ayant pour effet secondaire de mettre à jour les données stockées dans x
est essentiellement un concept issu de la programmation orientée objet. Ainsi, plutôt que de définir une fonction pop
pour agir sur des vecteurs de caractères, nous pouvons créer une classe de référence avec une méthode pop
.
PopStringFactory <- setRefClass(
"PopString",
fields = list(
x = "character"
),
methods = list(
initialize = function(x)
{
x <<- x
},
pop = function(n = 1)
{
if(nchar(x) == 0)
{
warning("Nothing to pop.")
return("")
}
first <- substring(x, 1, n)
x <<- substring(x, n + 1)
first
}
)
)
x <- PopStringFactory$new("hello stackoverflow")
x
## Reference class object of class "PopString"
## Field "x":
## [1] "hello stackoverflow"
replicate(nchar(x$x), x$pop())
## [1] "h" "e" "l" "l" "o" " " "s" "t" "a" "c" "k" "o" "v" "e" "r" "f" "l" "o" "w"