Scala 准备一个可移植的?

Scala 准备一个可移植的?,scala,Scala,如何将cons前置到Iterable scala> val xs: Iterable[Int] = Seq(1) xs: Iterable[Int] = List(1) scala> xs :: 5 <console>:15: error: value :: is not a member of Int xs :: 5 ^ scala>val xs:Iterable[Int]=Seq(1) xs:Iterable[Int]=列表(1)

如何将
cons
前置到
Iterable

scala> val xs: Iterable[Int] = Seq(1)
xs: Iterable[Int] = List(1)

scala> xs :: 5
<console>:15: error: value :: is not a member of Int
       xs :: 5
          ^
scala>val xs:Iterable[Int]=Seq(1)
xs:Iterable[Int]=列表(1)
scala>xs::5
:15:错误:value::不是Int的成员
xs::5
^

我查看了列表,但没有找到它。

::
是特定于
列表的。事实上,这是一个
列表


没有在
Iterable
前加前缀的概念,因为并非所有
Iterable
都能保证顺序(例如,
Set
不能保证顺序)。您可能需要使用
Seq
来代替,它将使用
+:
进行预处理。

Iterable
没有
prepend
方法,但您可以使用“++”来连接两个Iterable:

scala> val xs: Iterable[Int] = Seq(1)
xs: Iterable[Int] = List(1)

scala> List(5) ++ xs
res0: List[Int] = List(5, 1)
Seq
确实有一个prepend方法,
+:
,您可以将其转换为Seq:

scala> 5 +: xs.toSeq
res1: Seq[Int] = List(5, 1)

我比我更喜欢这个答案。您想要使用一个
Seq
。我使用了一个Iterable,因为我用Seq手动滚动了序列函数(来自scalaz/haskell)。但是后来我有了一个集合,所以我使用了set和Seq的LUB-这是Iterable。你能用
Iterable
做的最好的事情就是使用
++
连接,这不一定会预先结束或保持顺序。在这个上下文中说“::is a List”是误导性的。方法“List:::”和案例类:“是不同的概念。