ruby – 没有从nil到integer的隐式转换 – 当尝试添加任何数组时
我正在尝试构建一个相当复杂的哈希,我很奇怪地得到错误
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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |