String(arg)
вызывает to_s
на arg
и возвращает результат.nil.to_s
возвращает новую пустую строку.String(nil)
поэтому возвращает новую пустую строку.
Array(arg)
пытается вызвать to_ary
, а затем to_a
на arg
, возвращая результат первого существующего метода(или [arg]
, если ни один из методов не существует).NilClass
не имеет метода to_ary
, но nil.to_a
возвращает новый пустой массив.Array(nil)
поэтому возвращает новый пустой массив.
Обратите внимание, что String(arg)
и Array(arg)
не являются конструкторами.Это просто глобальные методы, определенные в Kernel
.Чтобы создать объекты в Ruby, вы обычно вызываете new
для класса, например, Array.new(2)
для создания массива длиной 2.