Scala在地图输入函数中返回关键字

时间:2016-11-18 11:38:22

标签: scala return

我被告知在Scala中 return 关键字是可选的,我可以写或不写(至于;),无论编译器

请查看以下代码:       

  case class Data(x:Int)

  def test(data: List[Data]): List[Data] = {
    val newdata: List[Data] = data
      .map(d => {
        val newdx = d.x * 2
        return Data(newdx)
      })
    return newdata
  }

由于返回语句,它没有编译。

在main方法中使用相同的逻辑,也使用return,实际上是编译和工作。

那么,回归的语义是什么?

3 个答案:

答案 0 :(得分:3)

我不完全确定,但是阅读错误我会假设以下内容:

在这种情况下,return Data(newdx)test - 函数返回。函数返回一个列表,而return语句返回da Data对象。

当你不写return时,每个值都按预期映射,列表被创建并返回。

您可以从return中删除return newdata,因为这是最后一个语句,然后会返回您的列表。

答案 1 :(得分:1)

  

返回表达式return e必须出现在一些封闭的命名方法或函数的主体内。源程序f中最内层的命名方法或函数必须具有显式声明的结果类型,并且e的类型必须符合它。返回表达式计算表达式e并返回其值作为f的结果。返回对返回表达式后面的任何语句或表达式的评估。

避免在Scala中使用return。使用return不是函数式编程(它消除了函数式编程的原理)。

您的代码可以重写为

def test(data: List[Data]): List[Data] = data.map(elem => Data(elem.x * 2))

有关lambda函数返回的更多信息,请访问Use of return

答案 2 :(得分:1)

AFAIK 在Scala中,如果没有返回,那么最后一个表达式将是返回值。

在您的map中明确写return会导致error,因此只需将表达式附加到引用List的{​​{1}}