[Resolvido] - Dúvidas no Desafio 4.20

Pessoal, sou novo em Ruby e comecei a estudar pela nova apostila rr71 da Caelum. Tentei resolver o desafio 4.20 mas estou com dificuldades. Podem me dar uma ajuda?

O enunciado é:

  1. Queremos imprimir o nome de todos os alunos de uma turma com o código a seguir:

fj91 = Turma.new(“Guilherme”, “Paulo”, “Paniz”)
fj91.each do |nome|
puts nome
end

Crie a sua classe Turma que durante a invocação do método each, itera por todos os nomes passados em seu construtor.
Tente lembrar dos conceitos de blocos e programação funcional para resolver.

Eis o que tentei:

class Turma
  attr_accessor :nomes

  def initialize(*nomes)
    for nome in nomes
      @nomes << nome
    end
  end

  def nomes
    @nomes
  end
end

fj91 = Turma.new("Guilherme", "Paulo", "Paniz")

fj91.each do |nome|
  puts nome
end

Quando executo aparece o seguinte:

desafio4.rb:6:in `initialize': undefined method `<<' for nil:NilClass (NoMethodError)
	from desafio4.rb:5:in `each'
	from desafio4.rb:5:in `initialize'
	from desafio4.rb:20:in `new'
	from desafio4.rb:20

Podem me dar uma dica sobre o que estou errando?

Oi jamesjrj,

O problema esta acontecendo porque o ‘<<’ é um método, por mais estranho que possa parecer, e este método esta na classe do tipo lista.

Então, para usar-lo o @nomes precisar ser uma lista.

Modifiquei a sua classe de modo a fazer o que vc deseja, sei que Ruby é um pouco estranho de inicio, mas é bem empolgante

Qualquer dúvida é só perguntar.

A classe:

class Turma  
  attr_accessor :nomes  
  
  def initialize(*nomes)
    @nomes = []
    for nome in nomes  
      @nomes << nome  
    end  
  end
end

fj91 = Turma.new("Guilherme", "Paulo", "Paniz") 

fj91.nomes.each do |nome| 
  puts nome
end

Muito obrigado csr_!! Funcionou beleza agora!
Ainda estou me acostumando com o jeitão do Ruby. Esse negócio de Blocos e Programação Funcional ainda tá entrando na minha cabeça rsrs
Estou gostando do Ruby até agora. Parece ser uma linguagem bem poderosa e com uma sintaxe bem direta!

Mais uma vez obrigado e até a próxima!