Это метод Kernel#Array
, как уже говорили другие.
Но документация по Ruby не учитывает полезность этого метода для упрощения вашего кода. Также это не говорит о том, что объекты, у которых нет метода to_ary
или to_a
, инкапсулированы в массиве.
Array([1,2,3]) -> [1,2,3]
Array(1..3) -> [1,2,3]
Array({ a: 1, b: 2 }) -> [[:a, 1],[:b,2]]
Array("Hello World") -> ["Hello World"]
Array(1) -> [1]
Все эти функции Kernel#Array
позволяют обрабатывать типичные угловые случаи с параметрами в одной строке.
См. Этот код, который является типичной ситуацией во многих API или DSL:
# data can be nil, a single value or an array
def handle(data)
data ||= Array.new #Case 1: Data is nil
data = [data] unless data.is_a?(Array) #Case 2: Data is a single value
data.each { |d| ... }
end
Это можно упростить с помощью Kernel#Array
:
def handle(data)
Array(data).each { |d| ... }
end
Конечно, нужно быть осторожным с предоставлением различных типов для параметра data
, потому что методы to_ary
/ to_a
могут дать или не дать вам то, что вы ожидаете.