Создание множества массивов в одной строке

Мне нужно сделать что-то вроде следующего

e = []
m = []
p = []
t = []
...and so on for about 10 different arrays

Есть ли способ создать все эти массивы на одной строке?

Ответ 1

Вы можете сделать это, используя следующее:

e,m,p,t... = Array.new(10) { [] }

Оказывается,

[[]]*10

- это не правильный путь, [[]]*10 предназначен для повторения и просто повторяет один и тот же объект [] 10 раз, поэтому все переменные в конечном итоге будут назначены одному и тому же объекту.

Ответ 2

Как объявление нескольких переменных в одной строке a1, a2, a3 = 3, 10, 4

e, m, p, t ... = [], [], [], [] ...

Ответ 3

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

whatever = Hash.new{|h, k| h[k] = []}
whatever[:e] # => []
whatever[:m] << 42
whatever[:m] # => [42]
# etc...

В противном случае, как писал zomboid:

e, m, p, t ... = [], [], [], [] ...

Ответ 4

Что все не удается

>  p, q, r = v = Array.new(3, [])
 => [[], [], []] 
>  v.map(&:object_id)
 => [70155104393020, 70155104393020, 70155104393020] 
>  p = q = r = []
 => [] 
>  [p, q, r].map(&:object_id)
 => [70155104367380, 70155104367380, 70155104367380] 

Что работает

>  p, q, r = v = Array.new(3){ [] }
 => [[], [], []] 
>  v.map(&:object_id)
 => [70155104731780, 70155104731760, 70155104731740]