Ruby sketchup插件中的浮动循环

Ruby sketchup插件中的浮动循环,ruby,sketchup,Ruby,Sketchup,我需要在浮点上循环,但找不到正确的语法。 我尝试的是: (-1.0).upto(1.0).step(0.1) do |t| ... end 我得到以下错误: 错误:NoMethodError:-1.0的未定义方法'upto':Float> 编辑:有没有一种好的或更好的方法来完成这个循环?对于Float没有最新的方法,但您可以创建自己的类似方法 class Float def upto(target, options={}) options = {step: 1.0}.mer

我需要在浮点上循环,但找不到正确的语法。 我尝试的是:

(-1.0).upto(1.0).step(0.1) do |t|
    ...
end
我得到以下错误:

错误:NoMethodError:-1.0的未定义方法'upto':Float>

编辑:有没有一种好的或更好的方法来完成这个循环?

对于Float没有最新的方法,但您可以创建自己的类似方法

class Float
  def upto(target, options={})
    options = {step: 1.0}.merge(options)
    current_value = self
    while current_value < target
      yield current_value
      current_value += options[:step]
    end
  end
end

一个选项是在范围上使用step:

注意,当您以0.1递增时,您将遇到浮点精度问题。所以要考虑到这一点

-1.0
-0.9
-0.8
-0.7
-0.6
-0.5
-0.39999999999999997
-0.29999999999999993
-0.19999999999999996
-0.09999999999999995
5.551115123125783e-17
0.10000000000000006
0.20000000000000007
0.30000000000000004
0.4000000000000001
0.5000000000000001
0.6000000000000001
0.7000000000000001
0.8
0.9000000000000001
1.0

这根本不是一个好主意,但这将起作用,除非你应该将浮点四舍五入:-1.0..1.0.step0.1.to_a.each{e|e}@yzalavin为什么这不是一个好主意?有没有一个好的方法可以做到这一点?否决票可以解释他们的原因吗?因为问题是在SketchUp的上下文中,这表明他正在生成一个扩展,值得注意的是,SketchUp扩展仓库上承载的扩展不允许修改Ruby API命名空间以避免冲突。相反,它必须将浮动作为一个参数。
(-1.0..1.0).step(0.1) { |i|
  puts i
}
-1.0
-0.9
-0.8
-0.7
-0.6
-0.5
-0.39999999999999997
-0.29999999999999993
-0.19999999999999996
-0.09999999999999995
5.551115123125783e-17
0.10000000000000006
0.20000000000000007
0.30000000000000004
0.4000000000000001
0.5000000000000001
0.6000000000000001
0.7000000000000001
0.8
0.9000000000000001
1.0