Estoy filtrando una matriz en ruby y usando un bloque .select
para hacerlo. Las condiciones son lo suficientemente complejas como para que un solo bloque de línea sea espantoso pero no tan grande, por lo que un método diferente parece exagerado. Por lo tanto, quiero usar un bloque multilínea. Sin embargo, no estoy seguro de la sintaxis.Ruby array.select bloque multilínea
filtered_array = base_array.select do |elem|
return false if condition1
return false if condition2
return true
end
Lo anterior es claramente incorrecto, ya que return
sale del método, no el bloque, pero da una idea de lo que estoy buscando.
También podría utilizar múltiples declaraciones de selección, pero eso parece ofuscar lo que estoy tratando de hacer. Tenga en cuenta que las condiciones anteriores son lo suficientemente complejas que el uso de operadores lógicos para vincularlos resulta en un desastre.
También puede utilizar variables temporales. –
@ Anton ver mi edición por favor. – Kyle
Los bloques en matrices no funcionan con declaraciones de retorno (las devoluciones regresarían del método que contiene el bloque) a menos que sean lambdas, que bloques, por defecto, no lo son. La solución para su caso de uso particular es la que proporcionó Kyle, la general sería una declaración de caso o caso como zetetic provista, y en general, simplemente no use declaraciones de retorno para regresar de bloques, a menos que sepa que van a ser lambdas, o convertirse en métodos. –