加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如果找不到元素,为什么Scala的索引方法返回-1而不是None?

发布时间:2020-12-16 18:52:50 所属栏目:安全 来源:网络整理
导读:我一直想知道为什么在 Scala中用于确定集合中元素位置的各种索引方法(例如List.indexOf,List.indexWhere)返回-1以指示集合中不存在给定元素,而不是一个更惯用的选项[Int].返回-1而不是None是否有一些特别的优势,或者仅仅是出于历史原因? 解决方法 这只是出
我一直想知道为什么在 Scala中用于确定集合中元素位置的各种索引方法(例如List.indexOf,List.indexWhere)返回-1以指示集合中不存在给定元素,而不是一个更惯用的选项[Int].返回-1而不是None是否有一些特别的优势,或者仅仅是出于历史原因?

解决方法

这只是出于历史原因,但人们想知道历史原因是什么:历史是什么,为什么会这样呢?

直接历史记录是java.lang.String.indexOf方法,它返回索引,如果找不到匹配的字符,则返回-1.但这并不新鲜;如果在字符串中找不到字符,则Fortran SCAN函数返回0,这与Fortran使用1索引的情况相同.

这样做的原因是字符串只有正长度,因此任何负长度都可以用作None值而不会有任何拳击开销. -1是最方便的负数,所以就是这样.

如果编译器不够聪明,无法实现所有装箱和拆箱以及一切都无关紧要,这可以加起来.特别是,对象创建往往需要5-10 ns,而函数调用或比较通常需要1-2 ns,因此如果集合很短,创建一个新对象可能会有相当大的分数惩罚(更多如果你的记忆已经征税,GC有很多工作要做).

如果Scala最初有一个惊人的优化器,那么选择可能会有所不同,因为人们只会用选项编写东西,这更安全而不是特殊情况,然后相信编译器将其转换为适当的高性能码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读