Ruby 为什么会出现这样的错误:未定义的方法“[]';对于0..5:范围(NoMethodError)

Ruby 为什么会出现这样的错误:未定义的方法“[]';对于0..5:范围(NoMethodError),ruby,nomethoderror,Ruby,Nomethoderror,我正在用Ruby创建一个状态机简化程序。在循环遍历我为简化状态机而创建的表时,它正确地运行并生成所需的输出,但是,我得到以下错误:: undefined method `[]' for 0..5:Range (NoMethodError) from C:/Users/Sara/workspace/StateMachineSimplifier/statemachine_simplifier.rb:64:in each from C:/Users/Sara/workspace/Sta

我正在用Ruby创建一个状态机简化程序。在循环遍历我为简化状态机而创建的表时,它正确地运行并生成所需的输出,但是,我得到以下错误::

undefined method `[]' for 0..5:Range (NoMethodError)
    from C:/Users/Sara/workspace/StateMachineSimplifier/statemachine_simplifier.rb:64:in each
    from C:/Users/Sara/workspace/StateMachineSimplifier/statemachine_simplifier.rb:64:in x_out
    from C:/Users/Sara/workspace/StateMachineSimplifier/statemachine_simplifier.rb:268:in main
    from C:/Users/Sara/workspace/StateMachineSimplifier/statemachine_simplifier.rb:274:in <main>
我知道问题在于调用函数,但我不确定如何正确调用它,以获得适当最小化状态表的输出

您的问题在于:

pos_comb = x_out(pos_comb, s_table)
xout
返回循环的外部
值,该值是一个
范围
。在ruby中,for循环是一个表达式。例如:

x = for i in (0..5) do puts i end # x is equal to (0..5)
这和

def x_out()
    for i in (0..5) do puts i end
end

x = x_out()  # x is equal to (0..5)
x\u out
返回后,将覆盖
pos\u comb
的值,范围为
0..5
。然后将其传递回
x_out
,这会导致
while
循环的第二次迭代出现问题

现在,您似乎希望从
x_out
函数内部返回
arr1
,因此请尝试将

  ...
  end
  arr1  # <- insert this at the last line in your function
end
。。。
终止

arr1#您没有显示正确的代码。问题似乎是
C:/Users/Sara/workspace/statemachinesimplier/statemachinesimplier.rb
第64行中的
每个
语句都是针对0中的i.((arr1.size)-1)我在代码中没有任何each语句,我使用的是eclipse,这就是for循环出错的原因。这真的很奇怪。我可以使用
(0..5)[1]
重新创建错误,但没有看到类似的情况。您可以尝试从命令行运行,或者重新启动eclipse吗。我不太熟悉Ruby+EclipseDev,但知道在过去需要用Java+Eclipse重新启动的问题。这确实有帮助。我已经确定它正在将我的数组(arr1)最后更改为0..5,这导致了问题。现在,要确定原因。您确定第64行不在0..((arr1[i].size)-1)中j的
处吗?因为使用了一个索引
[]
操作符,所以它是有意义的。
def x_out()
    for i in (0..5) do puts i end
end

x = x_out()  # x is equal to (0..5)
  ...
  end
  arr1  # <- insert this at the last line in your function
end