首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scala Seq.sliding()违反了文档的基本原理?

Scala Seq.sliding()违反了文档的基本原理?
EN

Stack Overflow用户
提问于 2014-03-09 13:00:52
回答 1查看 262关注 0票数 1

在为我的系统的某些部分编写测试时,我发现了一些奇怪的行为,如果仔细检查,这些行为可以归结为以下几点:

代码语言:javascript
运行
复制
scala> List(0, 1, 2, 3).sliding(2).toList
res36: List[List[Int]] = List(List(0, 1), List(1, 2), List(2, 3))

scala> List(0, 1, 2).sliding(2).toList
res37: List[List[Int]] = List(List(0, 1), List(1, 2))

scala> List(0, 1).sliding(2).toList
res38: List[List[Int]] = List(List(0, 1))

scala> List(0).sliding(2).toList //I mean the result of this line
res39: List[List[Int]] = List(List(0)) 

在我看来,这就像List.sliding(),许多其他类型的sliding()实现违反了文档中提供的保证。

代码语言:javascript
运行
复制
def sliding(size: Int): Iterator[List[A]]

通过在固定大小块上传递“滑动窗口”对元素进行分组(而不是像分组中那样对它们进行分区)。 大小:每个组的元素数 返回:是一个生成大小列表的迭代器,除了最后一个和唯一的元素之外,如果元素少于size,那么将被截断。

据我所知,可以保证可以使用sliding(2)返回的迭代器迭代的所有列表都是长度为2的。我很难相信这是一个一直到目前版本的scala的bug,所以也许对此有解释,或者我误解了文档?

我使用的是“ScalaVersion2.10.3 (OpenJDK 64位服务器VM,Java 1.7.0_25)”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-09 13:20:57

不,没有这样的保证,而且您基本上强调了明确声明的doc行。这又是一个不同的重点:

返回:生成大小为size.的列表的迭代器,除了最后一个和唯一的元素,如果比少的话,将被截断。

因此,如果您有一个具有长度n**,的列表,并调用** .sliding(m)**,,其中** m > n**, _是结果的最后一个和唯一的元素_,其长度为** n.

在以下情况下:

代码语言:javascript
运行
复制
List(0).sliding(2)

只有一个元素(n = 1),您可以调用sliding(2),即m = 2, 2 > 1,这将导致结果的最后一个也是唯一的元素被截断为1

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22282486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档