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:::”和案例类:“是不同的概念。