Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

NoMethodError

Ao abrir o prompt e executar o script:

class Livro
  attr_reader :titulo, :preco, :ano_lancamento

  def initialize(titulo, preco, ano_lancamento)
    @titulo = titulo
    @preco = calcula_preco preco
    @ano_lancamento = ano_lancamento
  end

  private

  def calcula_preco(base)
    if @ano_lancamento < 2000
      base * 0.7
    else
      base
    end
  end
end

agile = Livro.new('Agile', 100.00, 1999)

O seguinte erro aparece:

Traceback (most recent call last):
        3: from teste.rb:21:in `<main>'
        2: from teste.rb:21:in `new'
        1: from teste.rb:6:in `initialize'
teste.rb:13:in `calcula_preco': undefined method `<' for nil:NilClass (NoMethodError)

Já procurei o erro e não encontrei. Alguém poderia me ajudar? Desde já, grato.

2 respostas
solução!

Já encontrei o erro!

Está no construtor, o atributo @ano_lancamento deve receber um valor antes da execução do método calcula_preco que, por sua vez, define o valor do atributo @preco.

Peço desculpas caso o erro tenha sido muito simples a ponto de ser perguntado no fórum.

Já encontrei o erro!

Está no construtor, o atributo @ano_lancamento deve receber um valor antes da execução do método calcula_preco que, por sua vez, define o valor do atributo @preco.

Peço desculpas caso o erro tenha sido muito simples a ponto de ser perguntado no fórum.