在Ruby中,此代码编译:
(Math::PI * 6 .. Math::PI * 6.5).bsearch{|f| Math.cos(f) <= 0.5}
在这种情况下,范围的默认步骤是什么?
你的案子没有任何步骤.浮点范围不能迭代.
代码
(Math::PI * 6 .. Math::PI * 6.5).to_a
Run Code Online (Sandbox Code Playgroud)
抛出 TypeError:
TypeError:无法从Float迭代
您的代码有效,因为bsearch没有迭代范围值.相反,它"知道"最小值和最大值,并将间隔减半,直到达到块{ |f| Math.cos(f) <= 0.5 }返回的值true.
为了看到这一点,您可以添加一个puts语句来检查尝试的值bsearch:
(Math::PI * 6 .. Math::PI * 6.5).bsearch { |f| puts f; Math.cos(f) <= 0.5 }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
516 次 |
| 最近记录: |