Scala 如何添加到列表中?斯卡拉
我是scala的新手,不明白为什么这个列表不正确。当我运行这个程序时,我只得到List()作为输出,而我应该得到参数平方的所有元素的列表。这应该是非常简单的,但操作是我在网上发现的,它不起作用Scala 如何添加到列表中?斯卡拉,scala,Scala,我是scala的新手,不明白为什么这个列表不正确。当我运行这个程序时,我只得到List()作为输出,而我应该得到参数平方的所有元素的列表。这应该是非常简单的,但操作是我在网上发现的,它不起作用 def Squareall (l: List[Int]): List[Int] ={ var r : List[Int]=List() for (i<-0 to l.length-1){ r:+ l(i)*l(i) } return r } def Squareall(l:
def Squareall (l: List[Int]): List[Int] ={
var r : List[Int]=List()
for (i<-0 to l.length-1){
r:+ l(i)*l(i)
}
return r
}
def Squareall(l:List[Int]):List[Int]={
var r:List[Int]=List()
对于(i您必须将新创建的列表分配给r
,如下所示:
r = r:+ l(i)*l(i)
def squareAll (l: List[Int]): List[Int] = {
for (i <- l) yield i * i
}
这是因为在Scala中,默认情况下List
是不可变的,并且:+
返回一个新列表,而不更新旧列表
当然,还有一个列表的可变变体scala.collection.mutable.MutableList
。您可以在其上使用++=
方法来增加集合
val mutableList = scala.collection.mutable.MutableList(1, 2)
mutableList.++=(List(3, 4))
Scala中通常避免使用示例中的命令式编码样式。Scala中的for
是一个表达式,这意味着它会产生一个值,因此您可以直接转换输入列表。要使用for
转换输入列表
,可以执行以下操作:
r = r:+ l(i)*l(i)
def squareAll (l: List[Int]): List[Int] = {
for (i <- l) yield i * i
}
甚至
def squareAll (l: List[Int]) = l.map(Math.pow(_, 2.0))
:+
返回新列表,而不是附加到当前列表。每次通过附加到当前r
创建新列表时,您都需要重新分配r
。因此…r=r:+l(i)*l(i)
就个人而言,我认为使用这些操作符从来都不容易。除了我知道x::Nil
做了什么之外。这些文档被认为非常混乱,以至于最近提出了PR,但因为困难太大而被拒绝。