Por ser uma linguagem orientada a objetos, Ruby possui variáveis de instância e de classe. As primeiras se referem a cada instância de uma determinada classe e as segundas à própria classe:
Como tudo em Ruby é um objeto, todas as classes (tanto as classes padrão do Ruby quanto as criadas pelo usuário) são objetos - instâncias da classe Class:
Créditos:
Guilherme Garnier
Tópico original:
https://blog.guilhermegarnier.com/2014/02/variaveis-de-classe-e-de-instancia-de-classe-em-ruby/
- Código:
class Funcionario
@@dias_de_ferias = 30
def salario=(valor)
@salario = valor
end
def salario
@salario
end
end
- Código:
Funcionario.class_variable_get(:@@dias_de_ferias) # 30
funcionario1 = Funcionario.new
funcionario1.salario = 2000
funcionario1.salario # 2000
funcionario2 = Funcionario.new
funcionario2.salario = 2500
funcionario2.salario # 2500
Como tudo em Ruby é um objeto, todas as classes (tanto as classes padrão do Ruby quanto as criadas pelo usuário) são objetos - instâncias da classe Class:
- Código:
String.class # Class
Funcionario.class # Funcionario
- Código:
class Funcionario
@bonus = 1000
def self.atualiza_bonus
@bonus = 2000
end
end
- Código:
class Funcionario
@@dias_de_ferias = 30
@bonus = 1000
end
class Gerente < Funcionario
@bonus = 5000
end
Funcionario.class_variable_get(:@@dias_de_ferias) # 30
Funcionario.instance_variable_get(:@bonus) # 1000
Gerente.class_variable_get(:@@dias_de_ferias) # 30
Gerente.instance_variable_get(:@bonus) # 5000
Gerente.class_variable_set(:@@dias_de_ferias, 45)
Gerente.class_variable_get(:@@dias_de_ferias) # 45
Funcionario.class_variable_get(:@@dias_de_ferias) # 45
- Código:
Funcionario.class_variable_get(:@@dias_de_ferias).object_id # 70139308064800
Gerente.class_variable_get(:@@dias_de_ferias).object_id # 70139308064800
- Código:
Funcionario.instance_variable_get(:@bonus).object_id # 70139307998300
Gerente.instance_variable_get(:@bonus).object_id # 70139308064780
Créditos:
Guilherme Garnier
Tópico original:
https://blog.guilhermegarnier.com/2014/02/variaveis-de-classe-e-de-instancia-de-classe-em-ruby/