Boa tarde. Sou prgoramador Java. Comecei a estudar Ruby há alguns dias e estou com problemas ao executar o código abaixo:
class Revista
include Comentavel
attr_accessor :nome
def initialize (novo_nome)
nome = novo_nome
end
end
revista = Revista.new("Chocolat")
revista.recebe_comentario("muito ruim!")
puts ("Revista: #{revista.nome} - Comentário: #{revista.comentarios}")
O resultado que obtenho é: Revista: - Comentário: muito ruim!
Ou seja, mesmo definindo a criação de métodos acessores (conhecidos como “get e set” em Java), a inicialização do objeto não inicia o atributo @nome.
[quote=diego_qmota]Boa tarde. Sou prgoramador Java. Comecei a estudar Ruby há alguns dias e estou com problemas ao executar o código abaixo:
class Revista
include Comentavel
attr_accessor :nome
def initialize (novo_nome)
nome = novo_nome
end
end
revista = Revista.new("Chocolat")
revista.recebe_comentario("muito ruim!")
puts ("Revista: #{revista.nome} - Comentário: #{revista.comentarios}")
O resultado que obtenho é: Revista: - Comentário: muito ruim!
Ou seja, mesmo definindo a criação de métodos acessores (conhecidos como “get e set” em Java), a inicialização do objeto não inicia o atributo @nome.
[/quote]
Cara, sei muito pouco de Ruby, mas para vc atribuir um valor à um atributo, vc utiliza @atributo = algo.
[quote=j0nny][quote=diego_qmota]Boa tarde. Sou prgoramador Java. Comecei a estudar Ruby há alguns dias e estou com problemas ao executar o código abaixo:
class Revista
include Comentavel
attr_accessor :nome
def initialize (novo_nome)
nome = novo_nome
end
end
revista = Revista.new("Chocolat")
revista.recebe_comentario("muito ruim!")
puts ("Revista: #{revista.nome} - Comentário: #{revista.comentarios}")
O resultado que obtenho é: Revista: - Comentário: muito ruim!
Ou seja, mesmo definindo a criação de métodos acessores (conhecidos como “get e set” em Java), a inicialização do objeto não inicia o atributo @nome.
[/quote]
Cara, sei muito pouco de Ruby, mas para vc atribuir um valor à um atributo, vc utiliza @atributo = algo.
[]'s[/quote]
Blz jonny. Mas nesse caso eu estava mandando gerar automaticamente os getters e setters (usando a instrução attr_accessor) e ali naquele trecho, na realidade, eu tava querendo chamar o setter do atributo (nome = novo_nome seria o mesmo que setNome(novo_nome)). O padrão do método acessor (setter) que modifica um atributo em Ruby é:
def nome_atributo= (novo_valor) @nome_atributo = novo_valor
end
Minha idéia era a seguinte:
[list]gerar automático métodos acessores: instrução attr_accessor;[/list]
[list]inicializar o atributo nome no construtor - já chamando o método que seta o atributo nome (criado pela instrução acima).[/list]
[quote=diego_qmota][quote=j0nny][quote=diego_qmota]Boa tarde. Sou prgoramador Java. Comecei a estudar Ruby há alguns dias e estou com problemas ao executar o código abaixo:
class Revista
include Comentavel
attr_accessor :nome
def initialize (novo_nome)
nome = novo_nome
end
end
revista = Revista.new("Chocolat")
revista.recebe_comentario("muito ruim!")
puts ("Revista: #{revista.nome} - Comentário: #{revista.comentarios}")
O resultado que obtenho é: Revista: - Comentário: muito ruim!
Ou seja, mesmo definindo a criação de métodos acessores (conhecidos como “get e set” em Java), a inicialização do objeto não inicia o atributo @nome.
[/quote]
Cara, sei muito pouco de Ruby, mas para vc atribuir um valor à um atributo, vc utiliza @atributo = algo.
[]'s[/quote]
Blz jonny. Mas nesse caso eu estava mandando gerar automaticamente os getters e setters (usando a instrução attr_accessor) e ali naquele trecho, na realidade, eu tava querendo chamar o setter do atributo (nome = novo_nome seria o mesmo que setNome(novo_nome)). O padrão do método acessor (setter) que modifica um atributo em Ruby é:
def nome_atributo= (novo_valor) @nome_atributo = novo_valor
end
Minha idéia era a seguinte:
[list]gerar automático métodos acessores: instrução attr_accessor;[/list]
[list]inicializar o atributo nome no construtor - já chamando o método que seta o atributo nome (criado pela instrução acima).[/list][/quote]
Não estou com o Ruby aqui, mas tente nome=(novo_nome)
EDIT: Cara, faça assim
def initialize(novo_nome)
self.nome = novo_nome
end