Загрузка результатов из `any?` И `include?` В массив - PullRequest
0 голосов
/ 04 января 2019

Это:

arry = %w[cat dog fish]
arry.any? {|s| pp s.include?('sh')}

выходы:

false
false
true

Когда я пытаюсь вставить элементы в массив,

tester = []
arry = %w[cat dog fish]
arry.any? {|s| tester << s.include?('sh')}

pp tester

выводит:

[false]

толкается только один элемент. Не уверен, почему я не могу поместить результаты из include? в массив.

Как я могу получить все результаты в массив?

1 Ответ

0 голосов
/ 04 января 2019

Enumerable#any? немедленно завершается, когда блок возвращает значение truthy.

Я не уверен, зачем вам использовать any? для этого варианта использования, но происходит следующее: на первой итерации блок возвращает массив, который является правдивым.

Используйте #each_with_object или даже просто #map вместо:

arry.each_with_object([]) { |s, tester| tester << s.include?('sh') }
arry.map { |s| s.include?('sh') }

Мой любимый:

arry.map(&/sh/.method(:!~)).map(&:!)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...