如何从scala函数返回值?

时间:2016-07-14 12:40:55

标签: scala loops return return-value

我对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请帮帮我。

提前谢谢。

2 个答案:

答案 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