Несоответствие типов, когда тип уже указан в Scala - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь использовать приведенный ниже код в Scala, используя GraphX ​​

val vertexRDD: RDD[(VertexId, String)] = graph.vertices.filter({
        case (id, (str)) => {
            val c: Boolean = scala.util.Try(str.toInt) match {
                case Success(_) => false
                case _ => true
            }
        }
    })

Эта функция с официальным интерфейсом def filter(pred: Tuple2[VertexId, VD] => Boolean): VertexRDD[VD]

Однако выдает type mismatch ошибку

[error]  found   : Unit
[error]  required: Boolean
[error]             }
[error]             ^

Как это могло быть? Я уже указал возврат, равный Boolean, и он действительно Boolean, я прав? ...

1 Ответ

0 голосов
/ 08 мая 2018

Причина этого сбоя заключается в том, что значением блока является значение последнего выражения в блоке, но, к сожалению, последнее выражение в вашем блоке - это объявление типа Unit. Чтобы это исправить, вы можете просто удалить объявление.

Вы также можете упростить свой код, используя Try.isSuccess и убрав ненужные скобки

val vertexRDD: RDD[(VertexId, String)] = graph.vertices.filter{
    case (_, (str)) =>
        scala.util.Try(str.toInt).isSuccess        
}
...