super用法
1. super为父类超类的引用,我们可以把super当作父类的一个实例(实际上并不是实例,这样便于理解)
2. 子类在初始化时一定会先执行父类的构造函数,不管是显式还是隐式
3. 父类有参时,super必须要显式调用且参数正确;无参时可隐式调用或显式调用不带参的super();
4. 第二种理解为 super.方法() 或者 super.属性 调用
5. 若子类重写,需添加一些功能,则要用到super,再次调用父类方法,使其保留,否则重写就把父类的方法都删掉了。(看个人需求)
6. 父类的构造函数带参,子类的构造函数可以不带参。但是父类如果为被直接调用则必须有默认参数,否则报错"未找到基类构造函数的默认参数"
7. 子类可以直接super("nickro")传给父类参数;
8. super关键字可以理解成父类的实例,比如父类有方法father();则可以直接super.father();调用父类方法,同时子类重写了father方法的话,也可以以此来分别获得子类和父类的father方法的调用;
判断一个表是否为空
【×】 a==nil 表格其实是一个指针,指向table的结构,所以方法错误。
【×】 a=={} a指针比较的对象是一个匿名的地址,所以方法错误。
【×】#a==0 #操作符要求table中的项都不为nil
【√】 next(a) == nil 使用泛型方法遍历一个table的下一个元素可以成功判断
pair与ipair的区别
ipair不会输出table中储存的键值对,会跳过键值对,然后按照顺序输出table中的值。
pair会输出table中的值和键值对,在输出的过程中先按照顺序输出值 ,然后乱序输出键值对。
ipairs只是按照索引值顺序,打印出了table中有索引值的数据,没有索引值的不管。
而pairs是先按照索引值打印,打印完成后再按照键值对的键的哈希值打印它的值。