zoukankan      html  css  js  c++  java
  • Lua 元表

    1. lua元表

    元表概念:

    • 引言:Lua中的每个值都有一套预定义的操作集合,如数字相加等。但无法将两个table相加,此时可通过元表修改一个值的行为,使其在面对一个非预定义的操作时执行一个指定操作。
    • 访问机制:例如两个table相加:
      1.先检查两者之一是否有元表
      2.检查是否有一个叫__add的字段,
      3.若找到,则调用对应的元方法。
      __add等即时字段,其对应的值(往往是一个函数或是table)就是“元方法”。

    2. lua实例

    
    local Set = {}
    local mt = {}
    
    function Set.new( l )
    	local set = {}
    	setmetatable(set, mt)
    	for _, v in ipairs( l ) do
    		set[v] = true
    	end
    	return set
    end
    
    
    function Set.union( a, b )
    	local res = Set.new{}
    	for k in pairs(a) do res[k] = true end
    	for k in pairs(b) do res[k] = true end
    	return res
    end
    
    function Set.intersection( a, b )
    	local res = Set.new{}
    	for k in pairs(a) do
    		res[k] = b[k]
    	end
    	return res
    end
    
    function Set.tostring( set )
    	local l = {}
    	for e in pairs(set) do
    		l[#l + 1] = e
    	end
    
    	return "{" .. table.concat( l, ", ") .. "}"
    end
    
    function Set.print(s)
    	print(Set.tostring(s))
    end
    
    mt.__add = Set.union
    
    s1 = Set.new{10, 20, 30, 50}
    s2 = Set.new{30, 1}
    s3 = s1 + s2
    Set.print(s3)
    
    print(#s3)
    print(getmetatable(s1))
    print(getmetatable(s2))
    
    
    
  • 相关阅读:
    C++
    复盘-2018.6.8~2020.6.8
    C++
    C++
    C++
    C++
    Python学习笔记(十)- 面向对象(一)
    SSHException: Error reading SSH protocol banner
    docker 安装mysql
    docker 安装部署
  • 原文地址:https://www.cnblogs.com/zjzyh/p/4922743.html
Copyright © 2011-2022 走看看