Scala中的map输入函数中的return关键字
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的语义是什么呢?
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
感谢解释。