Я пишу приложение Play 2.3.2 в Scala.Ошибка при возврате Будущее [Boolean] из a for для Scala
Я использую reactivemongo в качестве драйвера для базы данных MongoDB. У меня есть коллекция с названием «рекомендация.tagsSimilarity», которая содержит значение сходства между моими тегами, где тег находится в форме: «category: attribute».
Пример документа, как следующее:
{
"_id" : ObjectId("5440ec6e4165e71ac4b53a71"),
"id" : "10912199495810912197116116114-10912199581091219711611611450",
"tag1" : "10912199495810912197116116114",
"tag1Name" : "myc1:myattr",
"tag2" : "10912199581091219711611611450",
"tag2Name" : "myc:myattr2",
"eq" : 0
}
doment представляет собой элемент матрицы размерности пХпа, где п количество тегов, сохраненных.
Теперь я создал коллекцию с названием «рекомендация.корреляция», на которой я сохраняю корреляцию между «категорией» и тегом.
Для этого я пишу метод, который выполняет итерацию по элементам TagSimilarity в виде матрицы.
def calculateCorrelation: Future[Boolean] = {
def calculate(category: String, tag: String): Future[(Double, Double)] = {//calculate the correlation and return the tuple value
}
play.Logger.debug("Start Correlation")
Similarity.all.toList flatMap { tagsMatch =>
for(i <- tagsMatch) {
val category = i.tag1Name.split(":")(0) // get the tag category
for(j <- tagsMatch) {
val productName = j.tag2Name //obtain the product tag
calculate(category, productName) flatMap {value =>
val correlation = Correlation(category, productName, value._1, value._2) //create the correlation object
val query = Json.obj("category" -> category, "attribute" -> productName)
Correlations.update(query, correlation, upsert = true) flatMap{status => status match {
case LastError(ok, _, _, _, _, _, _) => Future{true}
case _ => Future{false}
}}
}
}
}
}
}
Но компилятор дает мне следующую ошибку:
[error] /Users/alberto/git/bdrim/modules/recommendation-system/app/recommendationsystem/algorithms/Pearson.scala:313: type mismatch;
[error] found : Unit
[error] required: scala.concurrent.Future[Boolean]
[error] for(i <- tagsMatch) {
[error] ^
[error] /Users/alberto/git/bdrim/modules/recommendation-system/app/recommendationsystem/algorithms/Pearson.scala:313: type mismatch;
[error] found : Unit
[error] required: scala.concurrent.Future[Boolean]
[error] for(i <- tagsMatch) {
[error] ^
[error] one error found
Что случилось ?? Я не могу понять, почему оператор for ничего не возвращает. В дополнение к тому, что я хочу спросить, почему я не могу написать код для понимания в Scala для повторения двух раз в списке.
Хорошо, я решил использовать карту, спасибо. –