Могу ли я добавить объект в массив в цикле, а затем вернуть массив в той же строке? - PullRequest
0 голосов
/ 26 мая 2018

У меня есть простой код ruby, в котором я создаю массив, создаю кучу объектов и помещаю их в массив, а затем возвращаю массив

def create_barcodes(count)
  barcodes = Array.new
  count.times { barcodes.push(Barcode.create) }
  barcodes
end

Такое ощущение, что должен быть способ уменьшитьэто в одну или две строки и, как минимум, избегать ссылки на массив barcodes в конце, чтобы он возвращался.Есть какой-нибудь умный способ заставить цикл подсчета возвращать массив?

Ответы [ 5 ]

0 голосов
/ 26 мая 2018

Просто из любопытства, ленивый экземпляр любого количества Barcodes:

[->() { Barcode.create }].cycle.take(count).map(&:call)
0 голосов
/ 26 мая 2018

В данном примере вам не нужно создавать экземпляр нового массива - просто используйте метод map .

Также, если вы оказались в ситуации, когда вам нужносоздать новый массив, заполнить его данными, а затем вернуть его. Я бы предложил использовать метод tap .

В вашем случае код будет выглядеть так:

Array.new.tap do |barcodes|
  count.times { barcodes.push(Barcode.create) }
end
0 голосов
/ 26 мая 2018

Попробуйте следующее:

count.times.map { Barcode.create }

Надеюсь, это поможет!

0 голосов
/ 26 мая 2018
barcodes = Array.new(count){ Barcode.create }
0 голосов
/ 26 мая 2018
def create_barcodes(count)
  barcodes = (1..count).map { Barcode.create }
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...