Ответ 1
Вы хотите next
вместо return
.
Я фильтрую массив в ruby и используя блок .select
, чтобы сделать это. Условия достаточно сложны, что один блок строк является отвратительным, но не настолько большим, поэтому отдельный метод кажется излишним. Таким образом, я хочу использовать многострочный блок. Однако я не уверен в синтаксисе.
filtered_array = base_array.select do |elem|
return false if condition1
return false if condition2
return true
end
Вышеприведенное явно неверно, поскольку return
завершает метод, а не блок, но дает представление о том, что я ищу.
Я мог бы также использовать несколько операторов select, но это, похоже, запутывает то, что я пытаюсь сделать. Обратите внимание, что приведенные выше условия достаточно сложны, что использование логических операторов для их связывания приводит к беспорядку.
Вы хотите next
вместо return
.
Изменить: Просто увидел это: "использование логических операторов для их привязки приводит к беспорядку". Не могли бы вы предоставить фактические условия?
filtered_array = base_array.select do |elem|
condition1 && condition2
end
Похоже, это можно было бы обработать с помощью case-case:
filtered_array = base_array.select do |elem|
case
when condition1
false
when condition2
false
else
true
end
end
Вероятно, вы должны просто использовать:
next(true)
Однако если это не сработает с вами, сделайте следующее:
my_array.select do |x|
# bool = false ### optional, uncomment this if you prefer
if x.id == 1
bool = true
end
bool
end