Подтвердить что ты не робот

Ruby array.select многострочный блок

Я фильтрую массив в ruby ​​и используя блок .select, чтобы сделать это. Условия достаточно сложны, что один блок строк является отвратительным, но не настолько большим, поэтому отдельный метод кажется излишним. Таким образом, я хочу использовать многострочный блок. Однако я не уверен в синтаксисе.

filtered_array = base_array.select do |elem|
    return false if condition1
    return false if condition2
    return true
end

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

Я мог бы также использовать несколько операторов select, но это, похоже, запутывает то, что я пытаюсь сделать. Обратите внимание, что приведенные выше условия достаточно сложны, что использование логических операторов для их связывания приводит к беспорядку.

4b9b3361

Ответ 1

Вы хотите next вместо return.

Ответ 2

Изменить: Просто увидел это: "использование логических операторов для их привязки приводит к беспорядку". Не могли бы вы предоставить фактические условия?

filtered_array = base_array.select do |elem|
    condition1 && condition2
end

Ответ 3

Похоже, это можно было бы обработать с помощью case-case:

filtered_array = base_array.select do |elem|
  case
  when condition1
    false
  when condition2
    false
  else
    true
  end
end

Ответ 4

Вероятно, вы должны просто использовать:

next(true)

Однако если это не сработает с вами, сделайте следующее:

my_array.select do |x|
  # bool = false ### optional, uncomment this if you prefer
  if x.id == 1
    bool = true
  end
  bool
end