/ / Cómo argumentar en ruby ​​con un hash como parámetro: ruby, hash, parámetros

Cómo discutir en ruby ​​con un hash como parámetro - ruby, hash, parámetros

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

Cuando trato de inicializar un nuevo producto

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

yo obtengo ArgumentError: wrong number of arguments (given 0, expected 1)

Respuestas

2 para la respuesta № 1

El paso de argumentos de la iniciación que muestra funciona bien:

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

Creo que el error proviene de esto:

PRODUCT_TYPES.index[product_code]

Observe antes que llame al index método como este:

AUTHORIZED_MANUFACTURERS.index(manufacturer_code)

En un caso está utilizando paréntesis (la forma correcta). En el otro, usas [] (incorrecto).

Este es un buen ejemplo de por qué es importante leer atentamente los mensajes de error y observar el número de línea que le da para el origen del error.