Lua程序设计之————Lua面向对象2

----------------------------------------------------------- Lua面向对象3
local smartMan = {
    name = "Tinywan",
    age = 26,
    money = 800000,
    sayHello = function()
        print("Tinywan say 大家好")
    end
}
local t1 = {}
local mt = {
    __index = smartMan,
    __newindex = function(table, key, value)
        print(key .. "字段不存在不要试图给他赋值")
    end
}
setmetatable(t1, mt)
t1.sayHello = function()
    print("HAHA")
end
t1.sayHello()
--- 输出结果
-- sayHello字段不存在不要试图给他赋值
-- Tinywan say 大家好

----------------------------------------------------------- Lua面向对象3
local smartMan = {
    name = "none"
}
local other = {
    name = "大家好,我是无赖的table"
}
local t1 = {}
local mt = {
    __index = smartMan,
    __newindex = other
}
setmetatable(t1, mt)
print("other的名字,赋值前:" .. other.name)
t1.name = "峨眉大侠"
print("other的名字,赋值后:" .. other.name)
print("t1 的名字:" .. t1.name)
--- 输出结果
-- other的名字,赋值前:大家好,我是无赖的table
-- other的名字,赋值后:峨眉大侠
-- t1 的名字:none

有问题

local 变量不放在全局函数中去

以上不需要 return 返回

时间: 2024-10-20 20:18:09

Lua程序设计之————Lua面向对象2的相关文章

Lua程序设计之————Lua面向对象1

完整代码 local mt = {} mt.__add = function(t1,t2) print("两个Table 相加的时候会调用我") end local t1 = {} local t2 = {} -- 给两个table 设置新的元表,一个元表就是一个table的值 setmetatable(t1,mt) -- meta:元素 setmetatable(t2,mt) -- 进行相加操作 local t = t1 + t2 print(t) --[[输出结果 两个Table

Lua程序设计 泛型for的定义

泛型for在循环过程内部保存了迭代器函数.实际上他保存着3个值:一个迭代器函数.一个恒定状态和一个控制变量. 泛型for的语法如下:   for <var-list> in <exp-list>  do   end  其中,<var-list>是一个或多个变量名的列表,以逗号分隔:<exp-list>是一个或多个表达式的列表,同样以逗号分隔.通常表达式列表只有一个元素,即一句迭代器工厂的调用.    for k, v in pairs(t) do print

Lua程序设计 深入函数01

在Lua中,函数是一种"第一类值":表示在Lua中的函数与其他传统类型的值(例如:数字和字符串)是一样的,可以存储到变量(全局,局部均可)或table中,可以作为实参传递给其他函数,还可以作为其他函数的返回值. "词法域":指一个函数可以嵌套在另一个函数中,内部的函数可以访问外部函数中的变量. Lua中的函数与所有其他值一样都是匿名的,当讨论一个函数时,实际上是在讨论一个持有某函数的变量.这与变量持有各种值一个道理,可以以多种方式来操作这些变量. a = {p = 

Lua程序设计 函数 正确的尾调用

Lua中的"尾调用"就是一种类似于goto的函数调用,当一个函数调用是另一个函数的最后一个动作时,该调用才算是一条"尾调用".[一个函数在调用完另一个函数之后,是否就无其他事情需要做了] function f(x) return g(x) end   也就是说,当f调用完g之后,f所代表的整个函数的调用才算执行完成也就无其他事情可做了.因此,这种情况中,程序就不需要返回那个"尾调用"所在的函数了. 所以在"尾调用"之后,程序也

Lua程序设计 非全局的函数

由于函数是一种"第一类值",因此一个显而易见的推论就是,函数不仅可以存储在全局变量中,还可以存储在table的字段和局部变量中. 大部分Lua库也采用了这种将函数存储在字段中的机制(io.read.math.sin).若要在Lua中创建这种函数,只需将常规的函数语法与table语法结合起来使用即可: lib = {} lib.foo = function(x,y) return x + y end  lib.goo = function(x,y) return x - y end 也可

《lua程序设计(第二版)》学习笔记(二)

直接上代码 1: -- 第2章 类型与值 2: -- 动态类型的语言,每个值都携带自身类型信息 3: print("类型打印,每个值都携带自身类型"); 4: print(type("Hello world")); -- string 完全采用8位编码,字符可以具有任何数值编码,可以将任意二进制数据存储到字符串中 5: --[[ 6: string是不可变值,不能像C一样修改一个字符创中某个字符,而是应该 7: 创建一个新的字符串; 8: 和其他对象一样,都是自动内

Lua程序设计(第二版)学习笔记(一)

前段时间认真的看了一下<lua程序设计(第二版)>这本书,每一章写一个lua脚本,诸多注释,相信给初学者有一定帮助. -- 第一章代码 print("hello Hello"); -- 全局函数 function face(n) if n == 0 then return 1 else return n + face(n - 1) end end print(face(100)); -- 1.1 程序快(chunk) -- 每段代码,源代码文件或者交互模式 的 一行 代码,

Lua程序设计 closure(闭合函数)

若将一个函数写在另一个函数之内,那么这个位于内部的函数便可以访问外部函数中的局部变量,这项特征称之为"词法域". 假设有一个学生姓名的列表和一个对应于每个姓名的年级列表,需要根据每个学生的年纪来对他们的姓名进行排序. names = {"Peter", "Paul", "Mary"} grades = {Mary = 10, Paul = 7, Peter = 8} table.sort(names, function(n1,

《lua程序设计(第二版)》学习笔记(五)

-- 第 5 章 函数 -- 一种对语句和表达式进行抽象的主要机制 print(os.date()); -- 打印日期 Sun Apr 20 12:44:46 2014 -- 一看到sun,感慨广州没有晴天 -- 函数没有参数也要括号 -- 特殊情况:只有一个参数的时候, 并且参数一个string/table构造式,可不写括号 print "Hello world" -- dofile "chapter03.lua" -- 冒号操作符:为面向对象式的调用而提供的函数