builtins/kernel_array.rb

tests/_examples/builtins/kernel_array.rb in the metorex repository.

p Array nil
p Array([1, 2])
p Array 3
p Array({a: 1})

class Pair
  def to_ary
    [1, 2]
  end
end

p Array(Pair.new)

class Listed
  def to_a
    [3, 4]
  end
end

p Array(Listed.new)

class PrivatePair
  def to_ary
    [5, 6]
  end
  private :to_ary
end

p Array(PrivatePair.new)

class NilAry
  def to_ary
    nil
  end

  def to_a
    [7, 8]
  end
end

p Array(NilAry.new)

class BadAry
  def to_ary
    "not an array"
  end
end

begin
  Array(BadAry.new)
rescue TypeError => error
  puts error.message
end

class BadToA
  def to_a
    "not an array"
  end
end

begin
  Array(BadToA.new)
rescue TypeError => error
  puts error.message
end

puts Kernel.private_instance_methods.include?(:Array)

Output:

[]
[1, 2]
[3]
[[:a, 1]]
[1, 2]
[3, 4]
[5, 6]
[7, 8]
can't convert BadAry to Array (BadAry#to_ary gives String)
can't convert BadToA to Array (BadToA#to_a gives String)
true