Ler a classificação
Os dados armazenados por um objeto R6 são deliberadamente escondidos do usuário, mantendo-os no elemento private. Esse é o princípio da encapsulação.
Se você quiser fornecer acesso a qualquer valor de dado, pode usar uma ligação ativa (active binding). Elas são funções que se comportam como variáveis.
As ligações ativas ficam no elemento active de um objeto R6. Para criar uma ligação ativa que obtenha um campo de dados privado (ou seja, uma ligação "somente leitura"), você cria uma função sem argumentos que apenas retorna o elemento privado.
O padrão para criar uma ligação ativa somente leitura é o seguinte:
thing_factory <- R6Class(
"Thing",
private = list(
..a_field = "a value"
),
active = list(
a_field = function() {
private$..a_field
}
)
)
A ligação ativa é chamada como uma variável de dados, não como uma função.
a_thing <- thing_factory$new()
a_thing$a_field # não a_thing$a_field()
Este exercicio faz parte do curso
Programação Orientada a Objetos com S3 e R6 em R
Instruções do exercicio
Uma fábrica de micro-ondas foi parcialmente definida para você.
- Atualize a definição para incluir uma ligação ativa de somente leitura para obter a potência nominal.
- A ligação ativa deve se chamar
power_rating_watts. - Ela é definida como uma função, sem argumentos.
- O corpo deve simplesmente retornar o campo privado
..power_rating_watts.
- A ligação ativa deve se chamar
- Crie um objeto de micro-ondas e atribua-o a
a_microwave_oven. - Leia sua potência nominal.
exercicio interativo prático
Tente este exercicio completando este código de exemplo.
# Add a binding for power rating
microwave_oven_factory <- R6Class(
"MicrowaveOven",
private = list(
..power_rating_watts = 800
),
active = list(
# Add the binding here
___ = ___
)
)
# Make a microwave
a_microwave_oven <- ___
# Get the power rating
___