Objetos
Sendo Ruby uma linguagem dinâmica, variáveis não têm tipo, e são apenas
referências a objetos*.
Uma atribuição não copia o objeto. Isso quer dizer que ao executar b =
a, estamos efetivamente fazendo com que a variável b se
refira ao mesmo objeto que a. Por exemplo:
class Teste # Define classe Teste
def set(v) # Define método 'set' com argumento v
@v = v # Inicializa o atributo @v
end
def get
@v
end
end
a = Teste.new # a se refere a um novo objeto Teste
b = a # b se refere ao mesmo objeto que a
a.set("oi")
a.get # >> oi
b.get # >> oi
Pode ser feita a cópia de um objeto, usando-se o método clone
(ou dup).
class Teste
def set(v)
@v = v
end
def get
@v
end
end
a = Teste.new # a se refere a um novo objeto Teste
b = a.clone # b se refere a uma cópia de a, ou seja, outro objeto Teste
a.set("oi")
a.get # >> oi
b.get # >> nil
Em Ruby, classes também são objetos (da classe Class), e como
tais, respondem a métodos e têm todas as demais características de objetos
normais.