zoukankan      html  css  js  c++  java
  • lua实现私有函数

    本文是原创文章,如需转载,请注明文章出处

    要用lua实现私有函数,关键就是使用metatable的特性来实现。

    Test.lua:

    local v = {};
    v.x = 100;
    v.y = 200;

    function v.new()
      local o = {};
      setmetatable(o, v);

      local mt = {f=v.f,x=v.x,y=v.y};
      v.__index = mt;--metatable中只提供f方法,则f成为共有函数,g成为私有函数
      return o;
    end

    function v:f()
      return v.g(self);
    end

    function v:g()
      return self.x + self.y;
    end

    return v;

    主函数:

    local test = require("Test.lua").new();

    print(test:f());--输出300

    print(test:g());--error 找不到g方法

    分析下整个过程:

    1.主函数new了一个test对象

    2.调用test:f()会从test的field中寻找f方法,没找到

    3.寻找metatable是否有__index,找到__index,发现是个table,则直接从table中找f方法

    4.找到f方法,等同于调用了v:f()

    5.v:f()中调用v表中的g方法,因为此时self是test对象,所以只能使用v.g(self)而不是v:g()

    6.v:g()根据传入的test对象,将test的x,y相加,输出300。

  • 相关阅读:
    sklearn
    Scrapy
    正则表达式re
    BeautifulSoup
    requests
    Python网络爬虫与信息提取
    Matplotlib
    Pandas
    NumPy
    制约大数据处理能力的几个问题
  • 原文地址:https://www.cnblogs.com/Pickcle/p/5307434.html
Copyright © 2011-2022 走看看