lua的很多语法跟matlab很像
最基本的赋值是一样的
循环和选择判断后面必须跟一个关键字:do和then
  1. for i =,, do
  2. ...
  3. end
  4. if then end
table是lua的唯一一种数据结构,但是可以用它来构造数组、链表、字典等。
  1. -- Dict literals have string keys by default:
  2. t = {key1 ='value1', key2 =false}
  3. -- String keys can use js-like dot notation:
  4. print(t.key1)-- Prints 'value1'.
增加新的key
  1. t.newKey = {}-- Adds a new key/value pair.
  2. t.key2 =nil-- Removes key2 from the table.

可以用任何数据作为key。但是一般如果用table作为key的话,它是通过严格判断两个table是否相同,有时候会查不到你想要的key

  1. for key,val in pairs(table) do
  2. print(key,val)
  3. end
_G 是一个特殊的table,它里面存储所有的全局变量
#v表示v这个list的数量
 
  1. -- 默认以字符串作为 key
  2. t = {key1 = 'value1', key2 = false}
  3. -- Javascript 一样以 . 取值
  4. print(t.key1) --> "value1"
  5. t.key3 = {} -- 加入新的键值对
  6. t.key2 = nil -- 销毁一组键值对
  7.  
  8. -- 理论上任何非 nil 的变量都可以作为 key
  9. u = {['@!#'] = 'qbert', [{}] = , [6.28] = 'tau'}
  10. print(u[6.28]) --> "tau"
  11. a = u['@!#'] -- a = 'qbert'
  12. b = u[{}] -- b = nil;像 Javascript 一样 {} 会创建新的对象
  13. -- 因此不要用蛋疼的 key 值,老老实实用字串或数字
----------
-  Metatables & metamethods
----------
-- 元表(metatable)就是表的表,像 Javascript 的原型(prototype)一样
-- 为表重载一些元方法(metamethods)
  1. f1 = {a = , b = }
  2. f2 = {a = , b = }
  3. -- s = f1 + f2 为错
  4.  
  5. mm = {}
  6. function mm.__add(x, y)
  7. sum = {}
  8. sum.a = x.a + y.a
  9. sum.b = x.b + y.b
  10. return sum
  11. end
  12.  
  13. setmetatable(f1, mm)
  14. setmetatable(f2, mm)
  15.  
  16. -- 实际调用 f1 metatable 中的 __add(f1, f2)
  17. -- 只为 f1 设置元表也可以
  18. s = f1 + f2 -- s = {a = 3, b = 5}
  19.  
  20. -- s2 = s + s 为错,s 未定义元表
  21.  
  22. -- __index 元方法重载表中 key 的提取符号 `.`
  23. defaultFavs = {animal = 'gru', food = 'donuts'}
  24. myFavs = {food = 'pizza'}
  25. setmetatable(myFavs, {__index = defaultFavs})
  26. food = myFavs.food
  27.  
  28. -- Lua 中的值都具有元方法,只有 Table 可以重载
  29. -- 所有元方法如下
  30.  
  31. -- __add(a, b) for a + b
  32. -- __sub(a, b) for a - b
  33. -- __mul(a, b) for a * b
  34. -- __div(a, b) for a / b
  35. -- __mod(a, b) for a % b
  36. -- __pow(a, b) for a ^ b
  37. -- __unm(a) for -a
  38. -- __concat(a, b) for a .. b
  39. -- __len(a) for #a
  40. -- __eq(a, b) for a == b
  41. -- __lt(a, b) for a < b
  42. -- __le(a, b) for a <= b
  43. -- __index(a, b) <fn or a table> for a.b
  44. -- __newindex(a, b, c) for a.b = c
  45. -- __call(a, ...) for a(...)
----------
- 类风格的 Table 与继承
----------

  1. -- Javascript 一样并没有内置 Class
  2. -- 但可以通过 Table `{}` 实现
  3.  
  4. Dog = {} -- 1.
  5. function Dog:new() -- 2.
  6. newObj = {sound = 'woof'} -- 3.
  7. self.__index = self -- 4.
  8. return setmetatable(newObj, self) -- 5.
  9. end
  10. function Dog:makeSound() -- 6.
  11. print('I say ' .. self.sound)
  12. end
  13.  
  14. mrDog = Dog:new() -- 7.
  15. mrDog:makeSound() --> "I say woof"
 
----------
- 4. 模块
----------
 
  1. -- 以下来自文件 mod.lua
  2. local M = {}
  3.  
  4. local function sayMyName()
  5. print('Hrunkner')
  6. end
  7.  
  8. function M.sayHello()
  9. print('Why hello there')
  10. sayMyName()
  11. end
  12. return M
  13. -- 以上
-- 回到主文件
  1. local mod = require('mod') -- 运行 mod.lua 中的代码
  2. -- 操作同下
  3. local mod = (function()
  4. -- Javascript 一样
  5. --[[
  6. mod.lua 中的代码
  7. ]]--
  8. end)()
  9.  
  10. mod.sayHello() --> "Why hello there"
  11. mod.sayMyName() --> 错!sayMyName() mod.lua 中的局部变量
-- require 返回的值将被缓存
-- 即使多次调用 require 被调用文件也只运行一次
 
  1. -- mod2.lua 包含 print("mod2")
  2. local a = require("mod2") --> "mod2"
  3. local b = require("mod2") -- 不输出, 实际为 b = a
  4.  
  5. -- dofile 是不缓存的版本的 require
  6. dofile("mod2") --> "mod2"
  7. dofile("mod2") --> "mod2"
  8.  
  9. -- loadfile 读取文件但不执行
  10. -- 勘误:f = loadfile('mod2'),需加后缀名,否则找不到文件
  11. f = loadfile('mod2.lua')
  12. f() --> "mod2"
  13.  
  14. -- loadstring 读取代码字符串
  15. f = loadstring("print('Lua is cool!')")
  16. f() --> "Lua is cool!"
 

15分钟学会Lua的更多相关文章

  1. 15分钟学会使用Git和远程代码库

    git是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...

  2. 15 分钟学会 Eclipse GMF

    背景 坦白说:过去在 Eclipse 里使用 Graphical Editor Framework(GEF)创建图形化编辑器 既慢又痛苦.这个过程包括理解复杂的框架和大量的冗余代码.但也说明 GEF ...

  3. 15分钟学会使用Git

    http://blog.csdn.net/u013510614/article/details/50588446 主体思想 Git作为一个复杂的版本控制系统,命令之多,相信很多小白已经望而却步,有的尝 ...

  4. 【git】15分钟学会使用Git和远程代码库

    Git是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...

  5. 15 分钟学会使用 Git 和远程代码库

    Git是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...

  6. 15分钟入门lua

    目录:[ - ] -- 1. Variables and flow control. -- 2. Functions. -- 3. Tables. -- 3.1 Metatables and meta ...

  7. [指南] 15分钟学会MySQL(Linux版)

    原文链接:http://www.mysqlpub.com/thread-348-1-1.html 原创出处:MySQLpub.com  , 作者:kider  ,转载请注明作者和出处,并不能用于商业用 ...

  8. 15分钟学会git基本的操作命令

    http://hao.jobbole.com/try-git/ 假如你现在新创建了一个项目,想把它提交到github上面? 假设你创建好了一个项目,并切换到项目的根目录下面: $ git status ...

  9. [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

    [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...

随机推荐

  1. 在Oracle中恢复被DROP掉的表

    在Oracle中可能不小心会DROP掉一个表,如果没有定期做备份的话,将会带来很大的麻烦.如果有的情况下,每天的数据都很重要,而定期备份的周期又稍长,情况恐怕也不容乐观!以前只知道Windows有个回 ...

  2. jquery.extend

    经常在插件中看到jquery.extend 方法,最近在尝试写一些简单的插件,顺便研究一下这个方法. 原文:http://www.cnblogs.com/RascallySnake/archive/2 ...

  3. php备份mysql的代码

    1. mydb.php //DB类2. backup.php //备份脚本3. restore.php //还原脚本 mydb.php <?class db{ var $linkid;var $ ...

  4. MVC 添加Area

    在MVC项目中经常会使用到Area来分开不同的模块让项目结构更加的清晰. 步骤如下: 项目 –> 添加 -> 区域 ( Area ) 输入 Admin 添加成功后 Area包含: 创建一个 ...

  5. Clang与libc++abi库安装

    系统ubuntu64位 Clang4.0 参考: 1 https://github.com/yangyangwithgnu/use_vim_as_ide#0.1 其中 第7章 工具链集成 2. htt ...

  6. 修改linux文件权限

    Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限分为只读,只写和可执行三种.以文件为例,只读权限表示只允许读其内容,而禁 ...

  7. 手机端页面自适应解决方案-rem布局

    rem布局 布局前插入原生js即可 (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationch ...

  8. 关于StringBuffer和StringBuilder

    StringBuffer 字符串特点:字符串是常量:它们的值在创建之后不能更改. 字符串的内容一旦发生了变化,那么马上会创建一个新 的对象. 注意: 字符串的内容不适宜频繁修改,因为一旦修改马上就会创 ...

  9. 用C#实现 查看exe所加载dll列表的功能

    var p = System.Diagnostics. Process.GetProcessesByName("w3wp").First(); List<System.Dia ...

  10. 在nginx中配置ip直接访问的默认站点

    一台机子部署多个网站,我们直接访问ip (外网内网都一样)提示无法访问或404. 因为有多个网站,我们想指定某个网站为IP访问默认的网站,如何操作呢? 解:在Listen ip:port; 这个指令行 ...