2011-07-19 25 views

Respuesta

25
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 ...

+0

Gracias. Sí, olvídate de la prueba real, era más sobre problemas de sintaxis. –

+0

Probablemente quiera incluir 1 valores en la categoría verdadera: 'case _ if x> = 1' –

+0

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

2

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) 
+1

Lanzar excepciones se considera una mala práctica en Scala. Mejor retorno 'O bien [IllegalArgumentException, Boolean]'. – Madoc

+3

¿Qué? ¿Por qué? ¿De quién es esta mala práctica? https://github.com/spray/spray/search?p=6&q=throw&ref=cmdform –

0

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 
+5

Um, 'def foo (x: Int) = x> 1' sería mucho más simple e infinitamente más claro. – dhg

Cuestiones relacionadas