Ruby: объектная to_a замена

Предупреждение: действующее ограничение open_basedir

Это предупреждение может появляться с различными функциями, связанными с доступом к файлам и каталогам. Он предупреждает о проблеме с конфигурацией.

Когда он появляется, это означает, что доступ был запрещен для некоторых файлов.

Само предупреждение ничего не нарушает, но чаще всего скрипт не работает должным образом, если предотвращается доступ к файлу.

Исправление обычно изменяет конфигурацию PHP , связанная настройка называется open_basedir .

Иногда неправильный имена файлов или каталогов, тогда исправление должно использовать правильные.

Вопросы, относящиеся

27
задан Andrew Marshall 22 July 2011 в 18:01
поделиться

6 ответов

Используйте метод Kernel#Array:

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

Да это может быть похожим на класс сначала, но это - на самом деле метод, который запускается с прописной буквы.

45
ответ дан Grant Hutchins 28 November 2019 в 04:46
поделиться

Кажется, что [только 117] Object.to_a удерживаются от использования, удаляя значение по умолчанию to_a и вынуждая каждый класс определить его собственное (например, Hash.to_a ).

self.to_a       #=> -:1: warning: default `to_a' will be obsolete
"hello".to_a    #=> ["hello"]
Time.new.to_a   #=> [39, 54, 8, 9, 4, 2003, 3, 99, true, "CDT"]

h = { "c" => 300, "a" => 100, "d" => 400, "c" => 300  }
h.to_a   #=> [["a", 100], ["c", 300], ["d", 400]]

, Если Вашим аргументом является экземпляр Object, попробуйте:

Hash.new(obj).to_a
<час>

@Daniel [комментируют к Ollivier]: Дело в том, что я не знаю, каков аргумент. Если это уже - массив, я хочу оставить его, иначе создать массив с одним элементом.

, Если это так, попробуйте:

obj = [obj] if !obj.is_a?(Array)
2
ответ дан Jonathan Lonowski 28 November 2019 в 04:46
поделиться

Я делаю это много, и всегда использую:

arg = [arg] unless arg.is_a?(Array)

, Хотя, если Вы знаете, что никогда не являетесь передающими в массивах как отдельные аргументы, которые можно также сделать:

arg = [arg].flatten
2
ответ дан glenn mcdonald 28 November 2019 в 04:46
поделиться

Можно взять утку, вводящую подход, если это удовлетворяет проблеме лучше, составьте список всех методов, в которых Вы нуждаетесь, и проверка, если объект уже имеет их, в противном случае делает его массивом:

[:[], :each, :etc...].all? { |m| obj.respond_to? m } ? obj : [obj]

преимущество состоит в том, что Вы даете объекту шанс реализовать свою собственную семантику для индексного доступа.

2
ответ дан krusty.ar 28 November 2019 в 04:46
поделиться

Я не уверен, помогает ли это, но в чем я часто нуждаюсь, не то, что аргумент является массивом, но что аргумент отвечает каждому.

arg = [arg] unless arg.respond_to? :each
1
ответ дан theschmitzer 28 November 2019 в 04:46
поделиться

Что относительно Array.new (1, аргумент)?

0
ответ дан Keltia 28 November 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: