no implicit conversion from nil to integer - when trying to add anything to array

前端 未结 4 766
天涯浪人
天涯浪人 2021-01-04 03:14

I\'m trying to build a fairly complex hash and I am strangely getting the error

no implicit conversion from nil to integer

when I use the l

4条回答
  •  礼貌的吻别
    2021-01-04 04:11

    Implicit Conversion Errors Explained

    I'm not sure precisely why your code is getting this error but I can tell you exactly what the error means, and perhaps that will help.

    There are two kinds of conversions in Ruby: explicit and implicit.

    Explicit conversions use the short name, like #to_s or #to_i. These are commonly defined in the core, and they are called all the time. They are for objects that are not strings or not integers, but can be converted for debugging or database translation or string interpolation or whatever.

    Implicit conversions use the long name, like #to_str or #to_int. This kind of conversion is for objects that are very much like strings or integers and merely need to know when to assume the form of their alter egos. These conversions are never or almost never defined in the core. (Hal Fulton's The Ruby Way identifies Pathname as one of the classes that finds a reason to define #to_str.)

    It's quite difficult to get your error, even NilClass defines explicit (short name) converters:

    nil.to_i
    => 0
    
    ">>#{nil}<<" # this demonstrates nil.to_s
    => ">><<"
    

    You can trigger it like so:

    Array.new nil
    TypeError: no implicit conversion from nil to integer
    

    Therefore, your error is coming from the C code inside the Ruby interpreter. A core class, implemented in C, is being handed a nil when it expects an Integer. It may have a #to_i but it doesn't have a #to_int and so the result is the TypeError.

提交回复
热议问题