И цепь не работает должным образом
Я пытаюсь реорганизовать этот мой код:
test_cases.select{ |x| x.script && x.script.versions && !x.script.versions.empty? }
и использовать драгоценный камень andand. Базовое использование просто говорит нам, что мы подставляем andand к &&(то есть к имени), поэтому я попробовал это:
test_cases.select{ |x| !x.andand.script.andand.script_versions.andand.empty? }
но, похоже, это НЕ целое утверждение (я только что понял это сейчас, когда писал вопрос)
Значит ли это, что я должен отделить пустое? статья? Есть ли функция andand, которая проверяет нет (но только последняя?)
3 ответа
Я фактически использовал это предложение, и оно работает:
test_cases.map{ |x| x.script.andand.versions && !x.script.versions.empty? }.none?
только один andand вызов и используемая карта вместо выбора
Вы всегда можете сделать
test_cases.select{ |x| x.andand.script.andand.script_version } unless x.empty?
По теме andand
В то время как мы используем его в нашем проекте, и в целом мне это нравится, я обнаружил, что ложное использование andand
может скрыть проблемы, которые должны быть надлежащим образом решены. Как и многие хорошие инструменты, его следует использовать с осторожностью.
Когда x
не является nil
это работает хорошо, я думаю. Проблема в том, когда x
является nil
так как ...empty?
возвращается также nil
, а также !nil
-> true
, Тогда это x
неправильно выбран. Я бы предложил явную проверку логического значения:
test_cases.select { |x| x.andand.script.andand.versions.andand.empty? == false }
Или, возможно, лучше использовать пробел / подарок без последнего andand:
test_cases.select { |x| x.andand.script.andand.versions.present? }
test_cases.reject { |x| x.andand.script.andand.versions.blank? }
Примечание: это не связано с проблемой здесь, но я предпочитаю, чтобы Ик, возможно, закончился, и, как только nil
рассматривается как "пустота" (false
это законное значение, которое, я думаю, не должно быть прокси).