我是scala的新手,我正在努力学习它。我遇到了一件非常简单的事情,我无法理解。我只是想在for循环中检查当前项是否存在于映射中,然后使用该值,否则用函数计算它。这应该很简单,但来自python,我不明白错误在哪里。
val predictions = for (review <- testValuesAsList;
if (storage.contains("review")){prediction = mymap("review")}
else {prediction = computeItemAvgRat(review._2, trainValuesAsList)}
) yield (review._3, prediction)
return predictions
在Scala中没有for
循环,只有for
理解;它们只是map
、flatMap
和withFilter
调用的糖语法
这就是导致代码失败的原因。
IMHO,for
语法很少比显式调用组合子更好。
val predictions = testValuesAsList.map {
case (_, b, c) => // I don't know what would be proper names for the variables.
val prediction = myMap.getOrElse(
key = "review",
default = computeItemAvgRat(b, trainValuesAsList)
)
c -> prediction
}