在Lua中将变量传递到函数中。

我是 Lua 的新手,所以(自然而然地)我在我尝试编程的第一件事情上卡住了。我正在使用 Corona 开发者包中提供的一个示例脚本。这是我尝试调用的函数的简化版本(无关的材料已删除):

function new( imageSet, slideBackground, top, bottom )

    function g:jumpToImage(num)

            print(num)
            local i = 0
            print("jumpToImage")
            print("#images", #images)
            for i = 1, #images do
                if i < num then
                    images[i].x = -screenW*.5;
                elseif i > num then
                    images[i].x = screenW*1.5 + pad
                else
                    images[i].x = screenW*.5 - pad
                end
            end
            imgNum = num
            initImage(imgNum)
        end

end

如果我尝试这样调用该函数:

local test = slideView.new( myImages )
test.jumpToImage(2)

我得到了这个错误:

attempt to compare number with nil

在第225行。似乎"num"没有传递到函数中。为什么呢?

原文链接 https://stackoverflow.com/questions/6038178

点赞
stackoverflow用户216292
stackoverflow用户216292

在哪里声明了g?您正在向g添加一个方法,但实际上它并不存在(作为局部变量)。然后您也没有返回g。但最可能的是这些只是复制错误或其他问题。真正的错误可能是您使用的调用test:jumpToImage的符号表示法。

您声明了 g:jumpToImage(num)。那个冒号意味着第一个参数应该被视为self。所以实际上,您的函数是g.jumpToImage(self,num)

稍后,您以test.jumpToImage(2)的形式调用它。这使self的实际参数为2,num为nil。您想做的是test:jumpToImage(2)。冒号将表达式扩展为test.jumpToImage(test,2)

查看这个页面了解有关Lua“:”语法的解释。

2011-05-17 23:29:45