Cuidado ao usar Kernel # Array ()

O método Kernel # Array () é útil quando você deseja converter ou agrupar um objeto em uma matriz, a menos que já seja uma matriz; nesse caso, ele apenas retorna a si mesmo.

No entanto, a maneira como o método funciona é tentar chamar #to_ary e também #to_a. Se o objeto responder a um desses métodos, o resultado pode não ser o que você esperava.

Para strings e números e muitos outros objetos de instância de classe principal isso funciona bem

Array(12)
#=> [12]

Array("asdf")
#=> ["asdf"]

Mas tenha cuidado com intervalos e valores de tempo

Array(Time.mktime(2013,4,5,6,7,8))
#=> [8, 7, 6, 5, 4, 2013, 5, 95, true, "EST"]

Qual é o valor de retorno de #to_a no objeto de tempo .

Da mesma forma com intervalos

Array(1..3)
#=> [1,2,3]

Ainda vale a pena verificar o tipo se você precisar envolver o objeto em uma matriz se você espera tempos ou intervalos. Mas, na verdade, qualquer classe não principal poderia responder a #to_ary ou #to_a de uma maneira que você não esperava.