Я пишу приложение Play 2.3.2 на Scala.
Я использую reactivemongo в качестве драйвера для моей базы данных MongoDB. У меня есть коллекция под названием «recommendation.tagsSimilarity», которая содержит значение сходства между моими тегами, где тег имеет форму: «категория: атрибут».
Пример документа выглядит следующим образом:
{
"_id" : ObjectId("5440ec6e4165e71ac4b53a71"),
"id" : "10912199495810912197116116114-10912199581091219711611611450",
"tag1" : "10912199495810912197116116114",
"tag1Name" : "myc1:myattr",
"tag2" : "10912199581091219711611611450",
"tag2Name" : "myc:myattr2",
"eq" : 0
}
Домент представляет собой элемент матрицы размеров nxn, где n — количество сохраненных тегов.
Теперь я создал коллекцию под названием «recommendation.correlation», в которой я сохраняю корреляцию между «категорией» и тегом.
Для этого я пишу метод, который перебирает элементы 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 для повторения двух раз в списке.