为什么我不能在具有“名称”的表中访问lua函数

时间:2016-04-21 14:50:06

标签: arrays lua

我是Lua的新手,但不是编程。我过去曾经广泛使用过Java。我决定学习Lua的最好方法是做一些阅读。我决定实现一个非常基本的面向对象版本并执行以下操作:

Object = {
    class = "object";
}

function Object:getClass()
        return self.class;
    end

function Object:printClass()
        print(self:getClass());
    end

print(Object:getClass()); --Returns "object"
print(Object["getClass"); --Returns the memory address of the function getClass()
print(Object["getClass"]()); --Should print the results of the function. Instead throws error "input:6: attempt to index a nill value (local self)" which, if I am understanding correctly, is the equivalent of a NullPointerException in Java.

为什么Lua抛出上面的错误?我究竟做错了什么?是否可以使用字符串“name”访问函数?问题是关于如何以面向对象的方式使用Lua,已经回答here

我测试了代码here

1 个答案:

答案 0 :(得分:4)

因为在Lua中,Object:getClass()Object.getClass(Object)的语法糖(如果你想获得技术,它只评估表达式Object一次)。因此,当您调用Object["getClass"]()时,您正在调用没有参数的函数。当函数尝试访问其第一个参数时,这将导致问题:self,这将是nil

因此错误,"尝试索引零值(本地自我)"。

这也是魔术变量self的来源。当您使用:声明函数时,语法糖会在参数列表的前面添加一个参数,并将其调用self