2017-02-28 1 views
0

Dans mon programme Scala, j'ai peu d'opérations de compréhension. Je veux avoir un si la condition à l'intérieur comme ceci,scala pour l'opération de condition de compréhension

user <- userDao.findUser(authToken) 
haveDevice <- userDao.haveDevice(deviceId, deviceType) 
if (haveDevice) { 
    r <- userDao.addDevice(user.id, deviceId, deviceType) 
} 

Mais le code ci-dessus n'est pas valide, comment faire? Merci

+0

Quelle erreur commet-elle? –

Répondre

0

syntaxe correcte pour l'utilisation si la condition à l'intérieur d'un pour la compréhension est comme indiqué ci-dessous.

for { 
    user <- userDao.findUser(authToken) 
    haveDevice <- userDao.haveDevice(deviceId, deviceType) 
    r <- userDao.addDevice(user.id, deviceId, deviceType) if haveDevice 
} 

en supposant que votre compréhension pour fonctionne sur un avenir, si la condition if échoue alors la compréhension entière retourne un avenir échoué avec l'erreur

java.util.NoSuchElementException: prédicat Future.filter ne satisfait

+0

Que faire si l'utilisateur <- userOpt, userOpt est none, retournera-t-il NoSuchElementException? –

+1

Si votre compréhension fonctionne sur une option au lieu de Future, alors pour aucune condition, vous n'obtiendrez pas d'exceptions NoSuchElementException. Au lieu de cela, la sortie de la compréhension sera Aucune. –