videos unless switch nombre for example completo ruby-on-rails ruby syntax switch-statement

ruby-on-rails - unless - ruby switch videos



Declaración de caso con múltiples valores en cada bloque ''cuando'' (3)

En una declaración de case , a , es el equivalente de || en una sentencia if .

case car when ''toyota'', ''lexus'' # code end

Algunas otras cosas que puedes hacer con una declaración del caso Ruby

La mejor manera que puedo describir lo que estoy buscando es mostrarte el código fallido que he intentado hasta ahora:

case car when [''honda'', ''acura''].include?(car) # code when ''toyota'' || ''lexus'' # code end

Tengo alrededor de 4 o 5 diferentes when situaciones deberían ser activadas por aproximadamente 50 posibles valores diferentes de car . ¿Hay alguna manera de hacer esto con los bloques de case o debo intentar un bloque masivo if ?


Otra buena manera de poner tu lógica en datos es algo como esto:

# Initialization. CAR_TYPES = { foo_type: [''honda'', ''acura'', ''mercedes''], bar_type: [''toyota'', ''lexus''] # More... } @type_for_name = {} CAR_TYPES.each { |type, names| names.each { |name| @type_for_name[type] = name } } case @type_for_name[car] when :foo_type # do foo things when :bar_type # do bar things end


Podría aprovechar las ventajas de la sintaxis aplastante o "splat" de ruby.

Esto hace when cláusulas sobrepasadas when exceso (tenga más de 10 valores para probar por rama si entiendo correctamente) sean un poco más legibles en mi opinión. Además, puede modificar los valores para probar en tiempo de ejecución. Por ejemplo:

honda = [''honda'', ''acura'', ''civic'', ''element'', ''fit'', ...] toyota = [''toyota'', ''lexus'', ''tercel'', ''rx'', ''yaris'', ...] ... if include_concept_cars: honda += [''ev-ster'', ''concept c'', ''concept s'', ...] ... case car when *toyota # Do something for Toyota cars when *honda # Do something for Honda cars ... end

Otro enfoque común sería usar un hash como una tabla de despacho, con claves para cada valor de car y valores que son algún objeto llamable que encapsula el código que desea ejecutar.