Scala中的map输入函数中的return关键字

18 浏览
0 Comments

Scala中的map输入函数中的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
  }

这段代码无法编译,因为有return语句。

将相同逻辑的代码,包括return语句,放在主方法中,实际上可以编译和运行。

那么,return的语义是什么呢?

0
0 Comments

Scala中的map输入函数中使用return关键字的原因是为了在lambda函数中使用return关键字。然而,使用return关键字在函数式编程中是不推荐的,因为它违反了函数式编程的原则。

在Scala中,return表达式return e必须出现在某个封闭的命名方法或函数的主体内。源程序中最内层的封闭命名方法或函数f必须具有显式声明的结果类型,而e的类型必须符合它。return表达式会计算表达式e并将其值作为f的结果返回。在return表达式之后的任何语句或表达式的评估都会被省略。

为了避免使用return关键字,可以将代码重写为:

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

在这个重写后的代码中,我们使用了Scala的map函数来遍历数据列表,并使用lambda函数来对每个元素进行操作。lambda函数的返回值将作为新的列表元素返回。

关于在lambda函数中使用return的更多信息可以参考这里:Use of return

感谢解释。

0
0 Comments

Scala中,如果没有return关键字,则最后一个表达式将作为返回值。在map函数中,显式地使用return关键字会导致错误,所以只需要保留表达式即可,该值将附加到引用.map的列表中。

0
0 Comments

Scala中的`return`关键字在`map`输入函数中的问题出现的原因是,当使用`return Data(newdx)`时,它会从`test`函数中返回。该函数返回一个列表,而`return`语句返回了一个`Data`对象。

解决方法是,去掉`return`语句中的`return`关键字,因为这是最后一条语句,它将返回你的列表。

代码示例:

def test(data: List[Int]): List[Data] = {
  data.map { dx =>
    val newdx = dx * 2
    Data(newdx) // 不需要使用 return 关键字
  }
}

0