no implicit conversion from nil to integer
当我使用线
manufacturer_cols << {:field => 'test'}
我在同一个循环中使用相同的行,它没有任何问题.
整个代码是
manufacturer_cols=[] manufacturer_fields.each_with_index do |mapped_field,index| if mapped_field.base_field_name=='exactSKU' #this is where it is breaking,if I comment this out,all is good manufacturer_cols << { :base_field=> 'test'} else #it works fine here! manufacturer_cols << { :base_field=>mapped_field.base_field_name } end end
——- manufacturer_fields的值——–
[{ “base_field”:{ “base_field_name”: “类别”,“ID”:1,“名称”: “类别”}},{ “base_field”:{ “base_field_name”: “描述”,“ID”:3,“姓名”: “SHORT_DESCRIPTION”}},{ “base_field”:{ “base_field_name”: “exactSKU”,“ID”:5 “名称”: “Item_SKU”}},{ “base_field”:{ “base_field_name” “标记”,“ID”:25,“名”: “Retail_Price”}},{ “base_field”:{ “base_field_name”: “家庭”,“ID”:26,“名”: “主题”}} ]
解决方法
我不知道为什么你的代码正在得到这个错误,但我可以告诉你错误是什么意思,也许这将有所帮助.
Ruby中有两种转换:显式和隐式.
显式转换使用短名称,如#to_s或#to_i.这些通常在核心中定义,它们一直被称为.它们是用于不是字符串或不是整数的对象,但可以转换为调试或数据库转换或字符串插值或任何内容.
隐式转换使用长名称,如#to_str或#to_int.这种转换适用于非常像字符串或整数的对象,只需要知道何时承担其自变量的形式.这些转换从来没有或几乎从未在核心中定义. (Hal Fulton的Ruby方法将Pathname标识为找到定义#to_str的原因的类之一).
很难得到你的错误,即使NilClass定义了显式(简称)转换器:
nil.to_i => 0 ">>#{nil}<<" # this demonstrates nil.to_s => ">><<"
你可以这样触发它:
Array.new nil TypeError: no implicit conversion from nil to integer
因此,您的错误来自Ruby解释器中的C代码.在C中实现的一个核心类,当它需要一个整数时,它被移交了一个零.它可能有一个#to_i,但它没有#to_int,所以结果是TypeError.