sketchup 插件中的浮动循环
Floating loop in a sketchup plugin
我需要在浮点数上循环,但找不到正确的语法。
我尝试了什么:
(-1.0).upto(1.0).step(0.1) do |t|
...
end
我收到以下错误:
Error: #NoMethodError: undefined method `upto' for -1.0:Float>
编辑:是否有"good"或更好的方法来执行此循环?
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
一个选项是在 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).upto(1.0).step(0.1) do |t|
...
end
我收到以下错误:
Error: #NoMethodError: undefined method `upto' for -1.0:Float>
编辑:是否有"good"或更好的方法来执行此循环?
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
一个选项是在 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