我已经编写了一个for循环来遍历Map,我希望这个函数在找到一些值时立即返回键(键和值都是Int类型)
var hs:Map[Int,Int] = Map(1 -> 1, 2 -> 2)
for ((k,v) <- hs) {
if (v == 1)
return k
}
但是,scala给我错误信息:
error: type mismatch;
found : Unit
required: Int
for ((k,v) <- hst)
^
one error found
然后我改为
var result = 0
for ((k, v) <- hst){
if (v == 1)
result = k
}
result
然后,它运作良好。为什么第一个版本有类型问题?
答案 0 :(得分:3)
编译错误由@ D.Peter解释,此子句缺少return
。
在 Scala 中,您可以使用find来执行此操作,例如:
hs.find(_._2 == 1).map(_._1).getOrElse(0) // get or return default value.
答案 1 :(得分:2)
如果您的功能永远不会进入if语句
,则忘记返回某些内容def a() : Int = {
var hs:Map[Int,Int] = Map(1 -> 1, 2 -> 2)
for ((k,v) <- hs) {
if (v == 1){
return k
}
}
return -1
}
答案 2 :(得分:0)
接受的答案不是很准确,因为它与输入if statement
无关,即使您删除了if
条件,它仍然无法编译。
问题是for循环本身。如果没有yield
,它只是充当副作用的构造。表示它返回Unit
。非常类似于foreach
语义。
了解更多here。