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

Fou*_*ore 4 ruby range

在Ruby中,代码编译:

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

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

Cri*_*scu 6

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

代码

(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)