2017-09-21 1 views
0

Je souhaite écrire une méthode scala pouvant prendre n'importe quel enfant de RuntimeException. Je l'ai mais il ne compile pas. Quel est le problème dans le code?Ecriture d'une méthode scala pouvant accepter une sous-classe de RuntimeException

def testme(e: RuntimeException): String = { 
    case e:BadRequestException=> "bad request" 
    case e: IllegalArgumentException=>"illegal argument" 
} 

Je reçois l'erreur ci-dessous

missing parameter type for expanded function 
[error] The argument types of an anonymous function must be fully known. (SLS 8.5) 
[error] Expected type was: String 
[error] def testme(e: RuntimeException): String = { 
[error]           ^
[error] one error found 
[error] (playWeb/compile:compileIncremental) Compilation failed 
[error] Total time: 5 s, completed Sep 21, 2017 2:45:09 PM 

Répondre

2

Vous devez spécifier ce que vous correspondant sur, par exemple ajouter un e match:

def testme(e: RuntimeException): String = e match { 
    case e:BadRequestException=> "bad request" 
    case e: IllegalArgumentException=>"illegal argument" 
} 
+0

Merci mais la correspondance de motif de Scala va correspondre à l'instance exacte de la sous-classe avec ce chèque ou il peut-être pas? – curiousengineer

+0

Si vous faites 'e: BadRequestException', cela correspondra si 'e' est une instance de' BadRequestException' ou l'une de ses sous-classes. Les cas sont comparés dans l'ordre, donc mettez d'abord des cas plus spécifiques. –

+0

Merci. Oui que je reçois. Essentiellement le plus strict (ou le plus classe d'enfants) d'abord est ce que vous vouliez dire. Je devenais confus si en passant RuntimeException il peut toujours correspondre et je pense que ce sera le cas. Sinon quel est le point de toute façon – curiousengineer