Strange arrayfields behaviour


#1

Here is a counterintuitive behaviour of the arrayfields.rb module.

It’s suppose to add light “indexing by keywords” capabilities to the
Array
class, without going all the way to hashes.

See http://rubyfurnace.com/docs/arrayfields-3.7.0/

However, after deleting items from an array, there is mismatch in the
fields.

Here is a small example:

require ‘arrayfields’
=> true

ar = [1, 2, 3]
=> [1, 2, 3]

ar.fields = [“one”, “two”, “three”]
=> [“one”, “two”, “three”]

ar[1]
=> 2

ar[“two”]
=> 2

ar
=> [1, 2, 3]

ar.delete_at(“two”) # ****** delete ar[“two”] ******
=> 2

ar[“two”] # ****** but there still is an ar[“two”] ******
=> 3

ar
=> [1, 3]

ar[“one”]
=> 1

ar[“three”]
=> nil

ar.keys
=> [“one”, “two”, “three”]

I don’t believe this is a bug. But this bit me.
Lesson learned: arrayfields don’t a Hash make.