15分钟学会Lua
- for i =,, do
- ...
- end
- if … then … end
- -- Dict literals have string keys by default:
- t = {key1 ='value1', key2 =false}
- -- String keys can use js-like dot notation:
- print(t.key1)-- Prints 'value1'.
- t.newKey = {}-- Adds a new key/value pair.
- t.key2 =nil-- Removes key2 from the table.
可以用任何数据作为key。但是一般如果用table作为key的话,它是通过严格判断两个table是否相同,有时候会查不到你想要的key
- for key,val in pairs(table) do
- print(key,val)
- end
- -- 默认以字符串作为 key
- t = {key1 = 'value1', key2 = false}
- -- 像 Javascript 一样以 . 取值
- print(t.key1) --> "value1"
- t.key3 = {} -- 加入新的键值对
- t.key2 = nil -- 销毁一组键值对
- -- 理论上任何非 nil 的变量都可以作为 key
- u = {['@!#'] = 'qbert', [{}] = , [6.28] = 'tau'}
- print(u[6.28]) --> "tau"
- a = u['@!#'] -- a = 'qbert'
- b = u[{}] -- b = nil;像 Javascript 一样 {} 会创建新的对象
- -- 因此不要用蛋疼的 key 值,老老实实用字串或数字
-
-
-
-
-
-
-
-
-
-
-
Metatables & metamethods
-
-
-
-
-
-
-
-
-
-
-
-
元表(metatable)就是表的表,像 Javascript 的原型(prototype)一样
-
-
为表重载一些元方法(metamethods)
- f1 = {a = , b = }
- f2 = {a = , b = }
- -- s = f1 + f2 为错
- mm = {}
- function mm.__add(x, y)
- sum = {}
- sum.a = x.a + y.a
- sum.b = x.b + y.b
- return sum
- end
- setmetatable(f1, mm)
- setmetatable(f2, mm)
- -- 实际调用 f1 的 metatable 中的 __add(f1, f2)
- -- 只为 f1 设置元表也可以
- s = f1 + f2 -- s = {a = 3, b = 5}
- -- s2 = s + s 为错,s 未定义元表
- -- __index 元方法重载表中 key 的提取符号 `.`
- defaultFavs = {animal = 'gru', food = 'donuts'}
- myFavs = {food = 'pizza'}
- setmetatable(myFavs, {__index = defaultFavs})
- food = myFavs.food
- -- Lua 中的值都具有元方法,只有 Table 可以重载
- -- 所有元方法如下
- -- __add(a, b) for a + b
- -- __sub(a, b) for a - b
- -- __mul(a, b) for a * b
- -- __div(a, b) for a / b
- -- __mod(a, b) for a % b
- -- __pow(a, b) for a ^ b
- -- __unm(a) for -a
- -- __concat(a, b) for a .. b
- -- __len(a) for #a
- -- __eq(a, b) for a == b
- -- __lt(a, b) for a < b
- -- __le(a, b) for a <= b
- -- __index(a, b) <fn or a table> for a.b
- -- __newindex(a, b, c) for a.b = c
- -- __call(a, ...) for a(...)
-
-
-
-
-
-
-
-
-
-
-
类风格的 Table 与继承
-
-
-
-
-
-
-
-
-
-
- -- 像 Javascript 一样并没有内置 Class
- -- 但可以通过 Table `{}` 实现
- Dog = {} -- 1.
- function Dog:new() -- 2.
- newObj = {sound = 'woof'} -- 3.
- self.__index = self -- 4.
- return setmetatable(newObj, self) -- 5.
- end
- function Dog:makeSound() -- 6.
- print('I say ' .. self.sound)
- end
- mrDog = Dog:new() -- 7.
- mrDog:makeSound() --> "I say woof"
-
-
-
-
-
-
-
-
-
-
-
4.
模块
-
-
-
-
-
-
-
-
-
-
- -- 以下来自文件 mod.lua
- local M = {}
- local function sayMyName()
- print('Hrunkner')
- end
- function M.sayHello()
- print('Why hello there')
- sayMyName()
- end
- return M
- -- 以上
-
-
回到主文件
- local mod = require('mod') -- 运行 mod.lua 中的代码
- -- 操作同下
- local mod = (function()
- -- 像 Javascript 一样
- --[[
- mod.lua 中的代码
- ]]--
- end)()
- mod.sayHello() --> "Why hello there"
- mod.sayMyName() --> 错!sayMyName() 是 mod.lua 中的局部变量
-
-
require 返回的值将被缓存
-
-
即使多次调用 require 被调用文件也只运行一次
- -- mod2.lua 包含 print("mod2")
- local a = require("mod2") --> "mod2"
- local b = require("mod2") -- 不输出, 实际为 b = a
- -- dofile 是不缓存的版本的 require
- dofile("mod2") --> "mod2"
- dofile("mod2") --> "mod2"
- -- loadfile 读取文件但不执行
- -- 勘误:f = loadfile('mod2'),需加后缀名,否则找不到文件
- f = loadfile('mod2.lua')
- f() --> "mod2"
- -- loadstring 读取代码字符串
- f = loadstring("print('Lua is cool!')")
- f() --> "Lua is cool!"
15分钟学会Lua的更多相关文章
- 15分钟学会使用Git和远程代码库
git是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...
- 15 分钟学会 Eclipse GMF
背景 坦白说:过去在 Eclipse 里使用 Graphical Editor Framework(GEF)创建图形化编辑器 既慢又痛苦.这个过程包括理解复杂的框架和大量的冗余代码.但也说明 GEF ...
- 15分钟学会使用Git
http://blog.csdn.net/u013510614/article/details/50588446 主体思想 Git作为一个复杂的版本控制系统,命令之多,相信很多小白已经望而却步,有的尝 ...
- 【git】15分钟学会使用Git和远程代码库
Git是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...
- 15 分钟学会使用 Git 和远程代码库
Git是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...
- 15分钟入门lua
目录:[ - ] -- 1. Variables and flow control. -- 2. Functions. -- 3. Tables. -- 3.1 Metatables and meta ...
- [指南] 15分钟学会MySQL(Linux版)
原文链接:http://www.mysqlpub.com/thread-348-1-1.html 原创出处:MySQLpub.com , 作者:kider ,转载请注明作者和出处,并不能用于商业用 ...
- 15分钟学会git基本的操作命令
http://hao.jobbole.com/try-git/ 假如你现在新创建了一个项目,想把它提交到github上面? 假设你创建好了一个项目,并切换到项目的根目录下面: $ git status ...
- [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)
[分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...
随机推荐
- 在Oracle中恢复被DROP掉的表
在Oracle中可能不小心会DROP掉一个表,如果没有定期做备份的话,将会带来很大的麻烦.如果有的情况下,每天的数据都很重要,而定期备份的周期又稍长,情况恐怕也不容乐观!以前只知道Windows有个回 ...
- jquery.extend
经常在插件中看到jquery.extend 方法,最近在尝试写一些简单的插件,顺便研究一下这个方法. 原文:http://www.cnblogs.com/RascallySnake/archive/2 ...
- php备份mysql的代码
1. mydb.php //DB类2. backup.php //备份脚本3. restore.php //还原脚本 mydb.php <?class db{ var $linkid;var $ ...
- MVC 添加Area
在MVC项目中经常会使用到Area来分开不同的模块让项目结构更加的清晰. 步骤如下: 项目 –> 添加 -> 区域 ( Area ) 输入 Admin 添加成功后 Area包含: 创建一个 ...
- Clang与libc++abi库安装
系统ubuntu64位 Clang4.0 参考: 1 https://github.com/yangyangwithgnu/use_vim_as_ide#0.1 其中 第7章 工具链集成 2. htt ...
- 修改linux文件权限
Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限分为只读,只写和可执行三种.以文件为例,只读权限表示只允许读其内容,而禁 ...
- 手机端页面自适应解决方案-rem布局
rem布局 布局前插入原生js即可 (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationch ...
- 关于StringBuffer和StringBuilder
StringBuffer 字符串特点:字符串是常量:它们的值在创建之后不能更改. 字符串的内容一旦发生了变化,那么马上会创建一个新 的对象. 注意: 字符串的内容不适宜频繁修改,因为一旦修改马上就会创 ...
- 用C#实现 查看exe所加载dll列表的功能
var p = System.Diagnostics. Process.GetProcessesByName("w3wp").First(); List<System.Dia ...
- 在nginx中配置ip直接访问的默认站点
一台机子部署多个网站,我们直接访问ip (外网内网都一样)提示无法访问或404. 因为有多个网站,我们想指定某个网站为IP访问默认的网站,如何操作呢? 解:在Listen ip:port; 这个指令行 ...