Problemas em métodos acessores

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.

[]'s

[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

Já tentei.

Consegui, no entanto, de outro modo:


class Revista
  
  include Comentavel  

  def initialize (novo_nome)
      self.nome = novo_nome
    end
    
      attr_accessor :nome
    
  end

Agora ele reconheceu…acho que têm que usar a palavra chave self (obrigatoriamente) para ele entender que é para chamar o método “setter”