switch operator one multiple estructura else conditions ruby if-statement conditional conditional-statements

operator - ¿Cómo escribo una compleja condición multilínea en Ruby?



ruby selenium if else (2)

Debe escapar del espacio en blanco con la barra diagonal inversa, es feo pero lo necesita si desea dividir las condiciones en varias líneas. O eso o deja el operador booleano en la línea anterior. Entonces cualquiera de estos funcionará:

if ( (aa != nil && self.prop1 == aa.decrypt)/ || (bb != nil && self.prop2 == bb.decrypt)/ ) && (self.id.nil? || self.id != id) return true end

o:

if ( (aa != nil && self.prop1 == aa.decrypt) || (bb != nil && self.prop2 == bb.decrypt)) && (self.id.nil? || self.id != id) return true end

Personalmente, por lo general, decido poner todas o cada una de las condiciones en un método que documenta por sí mismo lo que se está decidiendo:

def everythings_cool? ( (aa != nil && self.prop1 == aa.decrypt) || (bb != nil && self.prop2 == bb.decrypt)) && (self.id.nil? || self.id != id) end

entonces:

if everythings_cool? # do stuff

¿Cómo escribo esta declaración de condición compleja multi-línea en Ruby?

if ( (aa != nil && self.prop1 == aa.decrypt) || (bb != nil && self.prop2 == bb.decrypt) ) && (self.id.nil? || self.id != id) return true end

Estoy obteniendo un Syntax error; unexpected tOROP Syntax error; unexpected tOROP .

En Java, podría escribir

if ( ( (aa != null && aa.prop1.equals(aa.decrypt())) || (bb != null && bb.prop2.equals(bb.decrypt())) ) && (this.id != id) ) { return true; }


La respuesta corta es que el operador debe estar al final de la línea para decirle a Ruby que continúe leyendo la siguiente línea como parte de la declaración, así que esto funcionaría:

if ( (aa != nil && self.prop1 == aa.decrypt) || (bb != nil && self.prop2 == bb.decrypt) ) && (self.id.nil? || self.id != id) return true end

Dicho esto, probablemente puedas reducir la lógica lanzando excepciones basadas en valores de entrada y eliminando algunas comprobaciones redundantes (estoy haciendo algunos saltos aquí sobre cómo se verán tus variables, pero entiendes la idea).

raise ''aa must support decrypt'' unless aa.respond_to? :decrypt raise ''bb must support decrypt'' unless bb.respond_to? :decrypt if prop1 == aa.decrypt || prop2 == bb.decrypt if self.id != id return true end end