我被告知在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,实际上是编译和工作。
那么,回归的语义是什么?
答案 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}} }