什么是Scala中的#::的含义?

3
在Scala中,x#::xs的意思是什么?
例如:
 case x #:: xs => {

在这种情况下,x是一个流,但我认为相同的语法对于列表等也是有效的...
1个回答

4

这是一款用于模式匹配流的提取器extractor for pattern matching streams。但它不适用于列表。列表使用::(注意列表中没有#)。

case x #:: xs =>的意思是当匹配到该模式时,x会包含流的头部,而xs则包含流的剩余部分(尾部)。

请查看stream documentation以获取有关如何定义流的示例。


这是否等同于List中的x::xs? - Donbeo
1
@Donbeo,Lists 中的 x :: xs 等同于 streams 中的 x #:: xs,在模式匹配中。您还可以查看 Extractor Objects - lpiepiora
好的。我的理解是,只有在调用Stream时才会对其进行评估。在这种情况下,会评估Stream的第一个和第二个元素吗?(为了检查模式匹配) - Donbeo
只需要计算第一个元素(x)和尾部的第一个元素(xs)。其余部分不需要被计算。但请注意,该流是惰性求值的,这意味着它的元素仅被计算一次,然后缓存该值。 - lpiepiora

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接