/ / Como argumentar em ruby ​​com um hash como parâmetro - ruby, hash, parâmetros

Como argumentar em ruby ​​com um hash como parâmetro - ruby, hash, parameters

class Product < SimpleStore

@@Product = []
@@uniqueid = []

attr_reader :title
attr_reader :price
attr_reader :manufacturer
attr_reader :manufacturer_code
attr_reader :barcode
attr_reader :hash
attr_reader :code
attr_writer :price
attr_writer :manufacturer_code
attr_writer :code


def initialize (hsh = {"title" =>nil, "price" =>0, "manufacturer_code" =>0, "barcode" =>nil, "product_code" =>0})
@@Product << self
@title = hsh["title"]
@price = hsh["price"]
@manufacturer_code = hsh["manufacturer_code"].to_i
@manufacturer = AUTHORIZED_MANUFACTURERS.index(manufacturer_code)
@barcode = hsh["barcode"]
@code = "#{PRODUCT_TYPES.index[product_code]}--#{@manufacturer_code}--#{@barcode}"
@@uniqueid << @code

Quando tento inicializar um novo produto

product1 = Product.new({"title"=>"teste","price"=>10,"manufacture_code"=>0,"barcode"=>"aaa111","product_code"=>1})

eu recebo ArgumentError: wrong number of arguments (given 0, expected 1)

Respostas:

2 para resposta № 1

A passagem do argumento da iniciailização que você mostra funciona bem:

def foo(hsh={"title"=>"teste","price"=>10,"manufacture_code"=>0,"barcode"=>"aaa111","product_code"=>1})
end

foo({"title"=>"teste","price"=>10,"manufacture_code"=>0,"barcode"=>"aaa111","product_code"=>1})
# => nil

Acho que o erro está vindo disso:

PRODUCT_TYPES.index[product_code]

Observe antes que você chama o index método como este:

AUTHORIZED_MANUFACTURERS.index(manufacturer_code)

Em um caso, você está usando parênteses (da maneira correta). No outro, você usa [] (incorreto).

Este é um bom exemplo de porque é importante ler atentamente as mensagens de erro e examinar a linha num que fornece para saber a origem do erro.