我对scala相当新,并尝试了一些简单的事情。我创建了一个看起来像这样的函数:
private def checkValu() : Option[Integer] = {
if(!list.isEmpty()){
for(value <-list){
val x = list.get(0)
}
}
return (x)
}
我调用该函数以返回值x.I访问列表的值并希望返回列表中的第一个值。但不知怎的,这似乎不起作用。它给我一个错误说
"not found value x".
我也试过没有“返回”的声明,但是它在if和for循环中给出了错误
"type mismatch; found : Unit required: Option[Integer]"
我在这里缺少什么? seombody请帮帮我。
提前谢谢。
答案 0 :(得分:3)
我猜你正在寻找这样的东西:
def checkValue() : Option[Integer] = {
if(!list.isEmpty()) {//Assuming list is java.util.List[Integer] and want the last value
return Some(list.get(list.size() - 1))
}
None
}
此解决方案使用java.util.List<Integer>
,我猜您将其用于list
。只有当没有值时才会返回None
,否则,最后一个,虽然我不确定这是你的意图,以防你想要第一个:return Some(list.get(0))
更惯用的解决方案:
def checkValue() : Option[Integer] = {
if(!list.isEmpty()) {//Assuming list is java.util.List[Integer] and first value is required
Some(list.get(0))
} else {
None
}
}
我不确定你想要返回哪个值,因为你想循环遍历整个列表(方法的命名也没有帮助)。可能@cmbaxter是对的,你想要第一个。
关于错误消息的一些注释:首先:你指的是一个超出范围的变量x
(在for comprehension之外),所以它不是一个好的选择。第二个可能是由于没有else的if
语句引起的,这导致Unit
。由于这仍然是唯一的表达方式,因此尝试返回,但这不是Option[Integer]
。
答案 1 :(得分:2)
这不会更容易:
def checkValue(): Option[Int] = list.headOption
// assuming list is List[Int] and you want to return option of the first element