Ruby中浮点范围的默认步骤是什么?

时间:2015-01-05 19:49:38

标签: ruby range

在Ruby中,this代码编译:

(Math::PI * 6 .. Math::PI * 6.5).bsearch{|f| Math.cos(f) <= 0.5}

在这种情况下,范围的默认步骤是什么?

1 个答案:

答案 0 :(得分:6)

你的案子没有任何步骤。浮动范围不能迭代。

代码

(Math::PI * 6 .. Math::PI * 6.5).to_a

throws一个TypeError:

  

TypeError:无法从Float

迭代

您的代码有效,因为bsearch没有迭代范围值。相反,它是&#34;意识到&#34;最小值和最大值,并将间隔减半,直到达到块{ |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 }