【问题标题】:Ruby Shoes calculator functions don't run (array related error?)Ruby Shoes 计算器功能不运行(与数组相关的错误?)
【发布时间】:2013-09-07 08:50:10
【问题描述】:

我尝试在 Ruby Shoes 中编写一个带有 GUI 的简单计算器。

我们的想法是将您按下的按钮上的数字保存在一个数组中,然后从中获取一个整数(将array[i] * {arraydepth} 添加到数字的循环)。然后我会清除保存我的“结果”显示的堆栈,并将其替换为显示结果的新文本字段(目前它只是说“已更改”,因为我还没有做到这一点。)

我的方法不起作用。当我尝试使用此函数向数组中添加数字时

def addToVar(number)

  if choosingVar2
    var2Counter += 1
    var2[var2Counter] = number
  else
    var1Counter += 1
    var1[var1Counter] = number
  end

  transToNumber

rescue
  @p.clear { para \"edited\" }

end

它不会执行rescue 之前的任何代码。我试图在if/else 之前添加一个alert("alert")。这行得通,但是第一个if 之后和rescue 之前的所有内容都没有执行。为什么?

当我尝试使用以下函数从存储在数组中的值中获取整数时,我遇到了同样的问题

def transToNumber

  mult = 1
  while var1Counter > 0
    var1Num += var1[var1Counter] * mult
    mult *= 10
    var1Counter -= 1
  end

  mult = 1
  while var2Counter > 0
    var2Num += var2[var2Counter] * mult
    mult *= 10
    var2Counter -=1
  end

  @p.clear { para \"edited\" }

end

我怀疑我的数组有问题。

Complete code here.

【问题讨论】:

  • 请不要使用链接来发布您的代码。 Stack Overflow 上的问题可能会在未来的任何时候被许多其他人阅读,您不能保证其他网络资源的可靠性。

标签: ruby arrays shoes


【解决方案1】:

您遇到的问题涉及变量范围。在代码顶部定义的所有变量(例如,choosingVar2)都是本地变量,并且对您的方法(如 addToVar(number))不可见。 Ruby 对此抛出了一个错误,但由于通用的rescue 语句正在捕获但不报告异常,因此您看不到任何有用的错误消息。这就是为什么看起来代码没有执行的原因。

我要做的第一件事是注释掉您拥有的 rescue 语句,或者让它们显示一条通用消息,以便您可以更轻松地进行调试:

rescue Exception => msg
    puts msg

其次,您可以简单地将所有初始变量设置为实例变量,这将使它们可以在您的方法中访问(在我假设是 Shoes 中的类/对象的范围内):

@var2 = []
@var2[0] = 0
@var2Counter = 0
@var2Num = 0

@choosingVar2 = false

def addToVar(number)
  if @choosingVar2 
        @var2Counter += 1
        @var2[@var2Counter] = number
...

有关变量作用域的更多信息,您可以在网上(或在 ruby​​ 文档本身)找到很多教程和优秀的文章。这是一个例子:http://zetcode.com/lang/rubytutorial/variables/

【讨论】:

  • 感谢您的回答!我只添加了“救援”,因为我没有收到任何错误消息,并且想查看异常是否有问题。即使使用“rescue Exception => msg puts msg”,我什么也得不到。 (“cmd -> Shoes Calculator.rb”是错误的运行方式吗?)
  • 如果线程抛出异常,有没有办法告诉鞋子让程序崩溃? (抱歉重复评论,有 5 分钟的编辑限制:
猜你喜欢
  • 1970-01-01
  • 2012-05-21
  • 2010-12-31
  • 2016-11-26
  • 1970-01-01
  • 2021-11-21
  • 2015-09-28
  • 2013-10-10
  • 1970-01-01
相关资源
最近更新 更多