我有一些音速圆周率代码,它应该做8次旋律,并发挥柔和每次。然而,它并没有注意到变量。我做错了吗?
8.times do
i = 1
play 50, amp: 0.1 * i
sleep 0.25
play 55, amp: 0.2 * i
sleep 0.25
play 57, amp: 0.4 * i
sleep 0.25
play 62, amp: i
i = i - 0.125
end发布于 2020-11-25 13:29:35
问题
您的代码至少有三个问题:
i = 1显式地重置每个循环顶部i的值。i ||= 1.0放在块的顶部也不起作用,因为在每个循环开始时我总是为零。考虑下面这个最小的现有代码示例:
8.times { i = 1; i -= 0.125 }
i # NameError (undefined local variable or method `i' for main:Object)即使你在这个块中反思我,你也会发现它永远不会随着当前的逻辑而减少。
解决方案
解决问题的最简单方法是在块外设置i的初始值。例如:
i = 1.0
8.times do
i -= 0.125
p i
end
i
#=> 0.0使用Kernel#p语句,您可以看到数字正在下降:
0.875 0.75 0.625 0.5 0.375 0.25 0.125 0.0
您还可以看到,您的变量现在可以在块之外访问,并且在块退出后访问它时不再返回NameError。
i
#=> 0.0https://stackoverflow.com/questions/65004912
复制相似问题