在Ruby中,this代码编译:
(Math::PI * 6 .. Math::PI * 6.5).bsearch{|f| Math.cos(f) <= 0.5}
在这种情况下,范围的默认步骤是什么?
答案 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 }