【问题标题】:How do I return a value from a scala function?如何从 scala 函数返回值?
【发布时间】:2016-11-17 09:19:59
【问题描述】:

我对 scala 还很陌生,正在尝试一些简单的事情。我创建了一个看起来像这样的函数:

 private def checkValu() : Option[Integer] = {
    if(!list.isEmpty()){
        for(value <-list){
            val x = list.get(0)
        }
    }
    return (x)
  }

我调用函数以返回值 x。我访问列表的值并希望返回列表中的第一个值。但不知何故,这似乎不起作用。它给了我一个错误说

"not found value x". 

我也尝试过不使用“return”语句,但它在 if 和 for 循环中给出错误提示

"type mismatch; found : Unit required: Option[Integer]"

我在这里缺少什么?有没有人可以帮帮我。

提前谢谢你。

【问题讨论】:

  • 这不是 JavaScript。 x 的作用域是它所在的块,而不是包含函数。
  • 为什么这被否决了 4 次?这显然是 a) 尝试 b) 语言新手和 c) 在正确的网站上寻求帮助的人。没有任何煽动性,示例包含代码。
  • @wheaties 我认为需要澄清什么是预期结果。 (我也看到了积极的部分,这就是为什么我决定回答它,尽管我也能理解那些投反对票的人。)
  • @GáborBakos 很高兴你回答。我认为刚接触某个学科的人的普遍问题是他们不知道如何问他们不知道的东西,因为他们知道的太少了。

标签: scala loops return return-value


【解决方案1】:

我猜你正在寻找这样的东西:

 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&lt;Integer&gt;,我猜您将其用于listNone 在没有值存在时简单地返回,否则,最后一个,虽然我不确定这是你的意图,以防你想要第一个: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 是对的,而您想要第一个。

关于错误消息的一些注释:首先:您指的是一个超出范围(在 for 理解之外)的变量 x,所以这不是一个好的选择。第二个可能是因为if 没有else 语句导致Unit。由于它仍然是唯一的表达式,因此尝试返回它,尽管它不是 Option[Integer]

【讨论】:

  • 我不认为 OP 正在寻找最后一项(lastOption 可以很容易地满足这一点),因为他们每次循环遍历列表时都会获得第 0 个索引。我想他们想要的是headOption
  • @cmbaxter 我认为 OP 使用java.util.List,所以除非有隐式转换,否则不会使用lastOptionheadOption,尽管我认为这对她/他来说会更令人困惑。跨度>
  • import JavaConverters._,那么你可以通过list.asScala.lastOption获取scala API
  • @fommil 是的,这是真的,尽管与我的建议相比,这与原始代码更不相似——它没有说明应该做什么。我可能走在完全错误的轨道上,因为这个问题被标记为 [loop],尽管它不需要循环恕我直言。
【解决方案2】:

这不是更容易吗:

def checkValue(): Option[Int] = list.headOption 
// assuming list is List[Int] and you want to return option of the first element 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 2020-03-09
    • 1970-01-01
    相关资源
    最近更新 更多