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.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...