ruby - 都做吗?和任何?保证短路评估?

标签 ruby

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 View 是什么。

最佳答案

是的。

在决赛中draft在 Ruby 标准中,all? 定义如下:

  1. 在接收方调用方法each
  2. 对于方法 each 产生的每个元素 X:
    1. 如果给定 block ,则以 X 作为参数调用 block 。如果此调用返回虚假对象,返回 false
    2. 如果没有给出 block ,并且 X 是一个虚假的对象,返回 false
  3. 返回

注意第 2 步中的return 一词。这保证了短路评估。 any? 的定义类似。然而,该标准仍然是一个草案,我不知道哪些 Ruby 实现(如果有的话)旨在符合标准。

关于ruby - 都做吗?和任何?保证短路评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20674612/

相关文章:

ruby - 将日期格式的字符串更改为另一种格式

ruby-on-rails - 用于 ruby​​/rails 的自然语言日期解析器

ruby-on-rails - Rails NoMethodError(时间 :Class): not so trivial error 的未定义方法 `something '

ruby - 如何阻止 Savon 向 soap.body 添加前缀

ruby-on-rails - Rails 查询其所有关联记录在某些特定字段中为零或某些特定值的所有记录

ruby-on-rails - RSpec + DatabaseCleaner 帮助——拆卸过早发生

ruby - 实现k最近邻需要哪些数据?

ruby - 从 Jekyll 插件运行 Liquid 过滤器

ruby - 使用注入(inject)时可以分离出散列的键和值吗?

python - 为什么 ruby​​ 无法使用 wget 将文件保存到特殊路径?