做所有?还有什么?保证短路评估?

 脸皮乃身外之物 发布于 2023-02-09 12:17

在这两个测试一些代码pryirb我得到的结果如下:

[1] pry(main)> a = [1, 3, 5, 7, 0]
=> [1, 3, 5, 7, 0]
[2] pry(main)> a.any? {|obj| p obj; 3 / obj > 1}
1
=> true
[3] pry(main)> a.all? {|obj| p obj; 3 / obj > 1}
1
3
=> false

[2][3]我看到似乎有短路评估,尽快中止迭代,但这是保证行为?阅读文档没有提到这种行为.我意识到我可以使用inject,因为它将迭代所有内容,但我有兴趣找出官方Ruby视图是什么.

1 个回答
  • 是.

    在Ruby标准的最终草案中,all?定义如下:

      each在接收器上调用方法

      对于方法eachyeilds的每个元素X :

        如果给出了块,则以X为参数调用块.如果此调用返回falseish对象,则返回 false.

        如果没有给出块,并且X是一个假对象,则返回 false.

      回归真实.

    注意步骤2中的返回字.这可以保证短路评估.any?是类似的定义.但是标准仍然是草案,我不知道哪些Ruby实现(如果有的话)旨在符合标准.

    2023-02-09 12:17 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有