Несоответствие типов при использовании Jedis в Scala - PullRequest
0 голосов
/ 04 августа 2011

Следующий код выдает четыре ошибки несоответствия типов.Зачем?В первом и втором случаях я делаю простое сравнение со строками.В третьем случае я присваиваю false переменной типа Boolean.В последнем случае я просто печатаю трассировку стека!

Я озадачен.

Код:

//return TRUE if logged in
def isLoggedIn(auth: String): Boolean = {
    val jedis = pool.getResource()
    var userid = jedis.get("auth:" + auth)
    var retVal = false
    try {
        if(userid != null) { //error here
            val userAuth = jedis.get("uid:" + userid + ":auth")
            if(userAuth == auth) { // error here
                retVal = true // error here
            }
        }
    } catch {
        case e => e.printStackTrace() //error here
    } finally {
        pool.returnResource(jedis)
        return retVal
    }
}

Ошибка:

[error] type mismatch;
[error]  found   : Unit
[error]  required: Boolean
[error]                     retVal = true // error here
[error]                            ^
[error] type mismatch;
[error]  found   : Unit
[error]  required: Boolean
[error]                 if(userAuth == auth) { // error here
[error]                 ^
[error] type mismatch;
[error]  found   : Unit
[error]  required: Boolean
[error]             if(userid != null) { //error here
[error]             ^
[error] type mismatch;
[error]  found   : Unit
[error]  required: Boolean
[error]             case e => e.printStackTrace() //error here
[error]                                        ^
[error] four errors found

Я использую Jedis 2.0.0 (https://github.com/xetorthio/jedis) для взаимодействия с Redis DB. Метод Jedis.get () возвращает String. Я использую sbt 0.10.1 и scala 2.9.0-1.

Что происходит?

1 Ответ

0 голосов
/ 04 августа 2011

Исправлено. Нужно вывести return из try / catch / finally. Вот обновленный код, который прекрасно компилируется. Мой давний вопрос: почему return не может быть в конечном итоге?

//return TRUE if logged in
def isLoggedIn(auth: String): Boolean = {
    val jedis = pool.getResource()
    var userid = jedis.get("auth:" + auth)
    var retVal = false
    try {
        if(userid != null) { 
            val userAuth = jedis.get("uid:" + userid + ":auth")
            if(userAuth == auth) { 
                retVal = true 
            }
        }
    } catch {
        case e => e.printStackTrace()
    } finally {
        pool.returnResource(jedis)
    }
    return retVal
}
...