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。

  • 相关阅读:
    第八次课程作业
    第七次课程作业
    第六次课程作业
    第五次课程作业
    第三次课程作业
    第二次课程作业
    第一次课程作业
    FZU.Software Engineering1816 · First Homework -Preparation
    个人简介
    福大软工1816 · 第二次作业
  • 原文地址:https://www.cnblogs.com/Pickcle/p/5307434.html
Copyright © 2011-2022 走看看