Sketchup插件中的浮动循环

时间:2017-05-23 13:39:11

标签: ruby sketchup

我需要循环浮点但我找不到合适的语法。 我尝试了什么:

(-1.0).upto(1.0).step(0.1) do |t|
    ...
end

我收到以下错误:

  

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

编辑:是否有“好”或更好的方法来执行此循环?

2 个答案:

答案 0 :(得分:1)

一种选择是使用Range上的步骤:

(-1.0..1.0).step(0.1) { |i|
  puts i
}

注意,当您以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)

Float没有#upto方法,但您可以创建自己的类似方法

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

然后你可以......

(-1.0).upto(1.0, step: 0.1) do |t|
    ...
end