Каков эффект в Ruby при инициализации с помощью nil: x = String (nil) - PullRequest
3 голосов
/ 19 марта 2010

Каков эффект в Ruby, когда вы передаете nil в конструктор, как в:

s = String(nil)

или

a = Array(nil)

Означает ли это, что s или a равен nil или что s или a является незаселенным объектом типа String или типа Array?

1 Ответ

7 голосов
/ 19 марта 2010

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.

...