Я думаю, что наиболее подходящим для понимания списка было бы следующее:
some_array.select{ |x| x * 3 if x % 2 == 0 }
Поскольку Ruby позволяет нам помещать условное выражение после выражения, мы получаем синтаксис, аналогичный Python-версии понимания списка. Кроме того, поскольку метод select
не включает ничего, равного false
, все значения nil удаляются из результирующего списка, и не требуется никакого вызова для сжатия, как в случае, если бы мы использовали map
или collect
вместо.