¿Es posible hacer algo como:Scala: ¿coincidencia de patrones con enunciados condicionales?
def foo(x: Int): Boolean = {
case x > 1 => true
case x < 1 => false
}
¿Es posible hacer algo como:Scala: ¿coincidencia de patrones con enunciados condicionales?
def foo(x: Int): Boolean = {
case x > 1 => true
case x < 1 => false
}
def foo(x: Int): Boolean =
x match {
case _ if x > 1 => true
case _ if x < 1 => false
}
Tenga en cuenta que usted no tiene un caso para x == 1, aunque ...
me gustaría escribir algo como esto:
def foo(x: Int) = if (x > 1) true
else if (x < 1) false
else throw new IllegalArgumentException("Got " + x)
Lanzar excepciones se considera una mala práctica en Scala. Mejor retorno 'O bien [IllegalArgumentException, Boolean]'. – Madoc
¿Qué? ¿Por qué? ¿De quién es esta mala práctica? https://github.com/spray/spray/search?p=6&q=throw&ref=cmdform –
Desde el caso de x == 1
no se encuentra en su ejemplo, supongo que se maneja de la misma manera como x < 1
.
Puede hacerlo de esta manera:
def foo(x:Int):Boolean = (x - 1).signum match {
case 1 => true
case _ => false
}
Pero entonces, esto desde luego puede ser simplificado mucho:
def foo(x:Int) = (x - 1).signum == 1
Um, 'def foo (x: Int) = x> 1' sería mucho más simple e infinitamente más claro. – dhg
Gracias. Sí, olvídate de la prueba real, era más sobre problemas de sintaxis. –
Probablemente quiera incluir 1 valores en la categoría verdadera: 'case _ if x> = 1' –
solo una pequeña pregunta. entonces en Scala, si un caso no devuelve un valor (por ejemplo, condición no verdadera), Scala continuará ejecutándose siguiendo las ramas del caso, ¿verdad? – hqt