1
resposta

Duvida com o passagem de parametro para um método

Quando eu executo o meu código o terminal recebo o seguinte erro

O erro :

C:/Users/mateus viana/Videos/Ruby/exercisiosAlura/Curso Ruby Orienta��o Objeto/Sistema De Compras de Livros/Sistema.rb: C:/Users/mateus viana/Videos/Ruby/exercisiosAlura/Curso Ruby Orientação Objeto/Sistema De Compras de Livros/Estoque.rb:28: syntax error, unexpected ',', expecting ')' (SyntaxError)
    que_mais_vendeu_por( &:titulo , "LIVRO")
                                   ^
C:/Users/mateus viana/Videos/Ruby/exercisiosAlura/Curso Ruby Orientação Objeto/Sistema De Compras de Livros/Estoque.rb:28: syntax error, unexpected ')', expecting keyword_end
    que_mais_vendeu_por( &:titulo , "LIVRO")
                                            ^
C:/Users/mateus viana/Videos/Ruby/exercisiosAlura/Curso Ruby Orientação Objeto/Sistema De Compras de Livros/Estoque.rb:32: syntax error, unexpected ',', expecting ')'
  def que_mais_vendeu_por(&campo , tipo)
                                  ^

segue abaixo o código da minha classe estoque

Estoque.rb

class Estoque

  attr_reader :livros

  def initialize()

    @livros = []
    @livros.extend(Contador)
    @vendas = []

  end


  def mais_baratos_que(valor)

    @livros.select do |livro|

      livro.preco <= valor

    end

  end

  def livro_que_mais_vendeu_por_titulo

    que_mais_vendeu_por( &:titulo , "LIVRO")

  end

  def que_mais_vendeu_por(&campo , tipo)

    @vendas.select{|l| l.tipo == tipo.sort {|v1 , v2|}

      quantidade_de_vendas_por(v1 , &:campo) <=> quantidade_de_vendas_por(v2 , &:campo)

    }.last

  end

  def quantidade_de_vendas_por(livro , &campo )

    @vendas.count {|venda|  campo.call(venda) == campo.call(livro) }

  end

  def total

    return @livros.size

  end

  def exporta_csv()


    @livros.each do |livro|

      livro.to_csv

    end


  end


  def <<(livro)

    if livro

      @livros << livro

    end

    self
  end

  def vende(livro)

    @livros.delete(livro)
    @vendas << livro

  end

end
1 resposta

Boa noite Mateus tudo beleza? meu caro não entendo nada de ruby, mas o erro que ta dando é de syntax, Meu chute é que você deve ter colocado alguma virgula ou aspas em algum lugar que não deveria ou até mesmo que tenha faltado kkkk. Como disse não entendo nada de ruby, mais olhando ele, me reparei que cada vez que você abre o def que deve metodo você logo fecha com o end correto? Tem lugares que você fecha com end e tem lugares que você deixa pra fechar o end la em baixo... É apenas um chute. Tenta dar uma olhada certinho nesses end pra ver se não pode ser eles o problema. Por Exemplo.

  def mais_baratos_que(valor)

    @livros.select do |livro|

      livro.preco <= valor

    end

  end

Aqui está fechando 2 end, 1 que é o def, e o outro que é a sua pesquisa com um select correto?

def que_mais_vendeu_por(&campo , tipo)

    @vendas.select{|l| l.tipo == tipo.sort {|v1 , v2|}

      quantidade_de_vendas_por(v1 , &:campo) <=> quantidade_de_vendas_por(v2 , &:campo)

    }.last

  end

Aqui ja está fechando só um end, que é da sua pesquisa do select, falto fechar o end do metodo, Relembrando não entendo nada de ruby é apenas um chute kk