Keep getting an error saying that this array value is nil, h

elemkeysraw = str.split(/=(?!>)/)
i = elemkeysraw.length
scr.printw(“This is the value of hashargs is #{hashargs} and it’s class
is
#{hashargs.class} and elemkeysraw[i] is #{elemkeysraw[i]}
elemkeysraw[i].split(/=>/)[0] is #{elemkeysraw[i].split(/=>/)[0]}”)

This is the chunk of code, and the elemkeysraw[i].split(/=>/)[0] causes
an
error;

private method `split’ called for nil:NilClass (NoMethodError)

However elemkeysraw[i] provides a value. What’s the deal with this?
I’m
guessing it is because the fact that “i” is not evaluated until runtime,
but
why does the element reference work, but not when attempting to use a
string
method on the value that is contained there?

Nathan T. wrote:

elemkeysraw = str.split(/=(?!>)/)
i = elemkeysraw.length
scr.printw(“This is the value of hashargs is #{hashargs} and it’s class
is
#{hashargs.class} and elemkeysraw[i] is #{elemkeysraw[i]}
elemkeysraw[i].split(/=>/)[0] is #{elemkeysraw[i].split(/=>/)[0]}”)

This is the chunk of code, and the elemkeysraw[i].split(/=>/)[0] causes
an
error;

private method `split’ called for nil:NilClass (NoMethodError)

However elemkeysraw[i] provides a value. What’s the deal with this?
I’m
guessing it is because the fact that “i” is not evaluated until runtime,
but
why does the element reference work, but not when attempting to use a
string
method on the value that is contained there?

Nil is a value. [][5] # => nil; “#{nil}” # => “”
Instead of wild guessing, I suggest you do #{elemkeysraw[i].inspect}
instead of just #{elemkeysraw[i]}. That gives you a better picture what
you really have, since #{} calls to_s on the value it encloses.

Regards
Stefan

If i equals the length of the array, elemkeysraw[i] would be out of
range
and return a nil value and trigger the error, no?
elemkeysraw[i-1] gets the last value in array.
Not sure why it would be returning a value earlier though.

Yes, brainfart for me. Elements start at 0. Doh!