zoukankan      html  css  js  c++  java
  • 关于lua中的冒号(":")和点号(".")的区别

    1、冒号定义方法,默认会接受self参数;而点号定义的时候,默认不会接受self参数

    例:

    (1)冒号定义

    function class:test()

      --这里会接受self参数,比如

      print(self.a,self.b)

      在这里self就是class对象本身,因此不会出错

    end

    (2)点号定义

    function class.test()

      --点号定义时,默认不会接受self参数,因此在这里用self会出错,找不到全局变量self,当然如果你把self定义成了一个全局变量的话。。。那么你赢了。。

      print(self.a,self.b)--报错,找不到全局变量self

    end

    二、调用方法的区别

    1、冒号调用方法,会默认地将对象本身(self)传递给方法;而点号调用则不会

    例1:冒号定义

    function class:test()  

      print(self.a,self.b)

    end

    (1)冒号调用:class:test(),这时候在test方法是可以使用self的,因为默认会将self传递给test方法

    (2)点号调用:class.test(),这时候在test方法中使用self就会报错了,因为self并没有被传递给test方法,那么要怎么在test方法中使用self呢?其实也简单,把class对象传递过去就好了,如:class.test(class)

    例2:点号定义

    function class.test()

      print(self.a,self.b)

    end

    (1)冒号调用:class:test(),这时会报错,这里虽然冒号调用会把self传递过去,但是点号定义方法不接受self啊,所以会报错。想要用就只能显式地接受参数了,方法重新定义一下:function class.test(self) print(self.a) end

    这样,冒号调用的时候默认把对象本身传递给方法了,方法也接受了这个参数,这就对了,参数self的名字可以改变,function class.test(tt) print(tt.a,tt.b) end

    (2)点号调用:class.test(),定义的时候没有接受参数,调用的时候又没有传递参数。。能成功才怪!

    直接说正确方法吧:就是传什么参数就用什么参数呗。。反正没有默认参数

    定义的时候,显式地接受参数

    function class.test(tt)

      print(tt.a,tt.b) 

    end

    class.test(class)

  • 相关阅读:
    03-模板引擎
    C#扩展方法
    DataTable转IHashObjectList
    创建DataTable
    02-一般处理程序基础
    css3相关样式
    css样式
    css基础知识
    表单和HTML5
    表格相关知识
  • 原文地址:https://www.cnblogs.com/cyct/p/11038661.html
Copyright © 2011-2022 走看看