Lua表是零

时间:2016-09-12 16:35:40

标签: arrays lua null

出于某种原因,Lua告诉我这条线出错了:

for i=1, #set do

其中set是我制作的函数的二维表参数。 它给了我一个错误:

  

尝试获取nil值的长度(本地设置)

奇怪的是,我运行此函数超过1000次,但错误只显示一次。我不确定为什么。 任何帮助,将不胜感激。而且我也可以打印出来的值,它们会出现,我认为这是一个可能的错误。

编辑:这是功能:(或其重要部分)

function GeneticTrainer:evaluate(id,correct,set)
local returny=0
local net=self.Networks[id]
for i=1, #set do
    --   print(i..k[i])
    net:Update(set[i])

    local error= math.abs(correct[i]-net.output[1])
    returny = returny + (1-(error/10))
end

这就是我所说的:

function GeneticTrainer:Evolve(Problem,Set)
local A=math.random(1,self.Population)
local B=math.random(1,self.Population)
if A==B then
    B=math.random(1,self.Population)
end
local AFitness = self:evaluate(A,Problem,Set)
local BFitness = self:evaluate(B,Problem,Set)

这就是我所说的:

BinarySet={{0,0},{1,0},{0,1},{1,1}}

for i=1, iterations do GATrainer:Evolve(Target,BinarySet) end

1 个答案:

答案 0 :(得分:1)

function GeneticTrainer:evaluate(id,correct,set)
  local returny=0
  local net=self.Networks[id]
  for i=1, #set do  -- this line causes the error!
  -- an so on...

错误是由上面的代码段第4行引起的。由于函数标题和set之间显然没有#set的任何标记,set必须输入函数{ {1}}

接下来你检查你拨打的地方nil 碰巧是这样的:

GeneticTrainer:evaluate(id,correct,set)

因为Set显然没有变化,进入函数function GeneticTrainer:Evolve(Problem,Set) local A=math.random(1,self.Population) local B=math.random(1,self.Population) if A==B then B=math.random(1,self.Population) end local AFitness = self:evaluate(A,Problem,Set) local BFitness = self:evaluate(B,Problem,Set) 然后进入GeneticTrainer:Evolve(Problem,Set),nil值也必须来自此函数之外。

未提供进一步的代码。 你将函数调用1000次而没有错误并不意味着如果你用1001次不同的参数调用它就不会导致错误。

只需按照self:evaluate(B,Problem,Set)通过调用堆栈,您就会发现问题。

您应该在错误消息中提供堆栈跟踪,告诉您在哪一行调用每个函数。

这非常简单,你必须做一个或类似程序员一百万次。你不需要我们在这里帮助你。

编辑:

在您的评论之后,我将您的代码减少到最低限度(您应该为您的问题做些什么)并通过Lua在线演示运行它,完全没有任何问题。 https://www.lua.org/cgi-bin/demo

我还使用另一个Lua解释器使用5000次迭代测试它,没有任何问题。

set

我说最近建立的Lua有一个让桌子消失的错误是不可能的。请再次检查您的代码。