首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的声音圆周率的变量没有变化-为什么?

我的声音圆周率的变量没有变化-为什么?
EN

Stack Overflow用户
提问于 2020-11-25 12:40:42
回答 1查看 124关注 0票数 1

我有一些音速圆周率代码,它应该做8次旋律,并发挥柔和每次。然而,它并没有注意到变量。我做错了吗?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-25 13:29:35

问题

您的代码至少有三个问题:

  1. 您的i变量是块本地的,所以它不会在块之外传播。这可能不是一个很大的问题,但它会使调试代码变得更加困难。
  2. 您正在使用i = 1显式地重置每个循环顶部i的值。
  3. 该块不会在对块的调用之间回溯I的值,因此将i ||= 1.0放在块的顶部也不起作用,因为在每个循环开始时我总是为零。

考虑下面这个最小的现有代码示例:

代码语言:javascript
复制
8.times { i = 1; i -= 0.125 }
i # NameError (undefined local variable or method `i' for main:Object)

即使你在这个块中反思我,你也会发现它永远不会随着当前的逻辑而减少。

解决方案

解决问题的最简单方法是在块外设置i的初始值。例如:

代码语言:javascript
复制
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。

代码语言:javascript
复制
i
#=> 0.0
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65004912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档