为什么80%的码农都做不了架构师?>>>   

-- 单行注释
--[[[多行注释]
--]]----------
- 1. 变量 & 控制流
----------
num = 23 -- 数字都是双精度
str = 'aspythonstring' -- 像 Python 一样不可变
str = "aspythonuse" -- 可以双引号
str = [[像 Python 的多行注释可用于表示多行字符串一样方便]]bol = nil -- 未定义;支持垃圾回收-- 缩进只为易读性,像 Matlab 一样以 end 结尾
while num < 50 donum = num + 1 -- 没有 ++ 或 += 自增操作符号
end-- IF 条件开关
if num > 40 thenprint('> 40')
elseif s ~= 'aspython' then -- ~= 表示 !=io.write('s is not aspython') -- 风骚的标准输出
elsethisIsGlobal = 5 -- 驼峰式命名-- 显示声明局部变量(像 Javascript 一样)local line = io.read()-- .. 作为字符串连接符print('凛冬将至' .. line)
end-- 引用未定义变量将返回 nil ,这不是错误
foo = anUnknownVariable  -- 等价于 foo = nilaBoolValue = false
-- 只有 nil 与 false 为逻辑假; 数字 0 与空字串 '' 为真!
if not aBoolValue then print('false') end-- 像 Python 一样运用 'or' 和 'and'
-- 得到 C 语言中 a ? b : c 的效果;需注意 b = false 或 nil 的情况
ans = aBoolValue and 'yes' or 'no'karlSum = 0
for i = 1, 100 do -- 像 Matlab 一样的递增语法,包括两端,如同数学中[1, 100]karlSum = karlSum + i
end-- Step 为 2 递减的方式 '100, 1, -2'
for j = 100, 1, -2 then print(j) end-- 综上,范围可表示为 "begin, end [, step]"-- 另一个循环控制
num = 23
repeatprint('凡人必有一死')num = num - 1
until num == 0----------
- 2. 函数
----------
function fib(n)if n < 2 then return 1 endreturn fib(n - 2) + fib(n - 1)
end-- Javascript 一样的匿名函数与闭包
function adder(x)-- 返回一个函数-- 闭包内封存 x 值return function (y) return x + y end
end
a1 = adder(9)
a2 = adder(36)
print(a1(16))  --> 25
print(a2(64))  --> 100-- 遇到不匹配的列表长度时
-- 过长的变量将被赋予 nil
-- 过长的值将被忽略x, y, z = 1, 2, 3, 4 -- 4 将被忽略
function bar(a, b, c)print(a, b, c)return 4, 8, 15, 16, 23, 42
end
x, y = bar('zaphod')  --> "zaphod  nil nil"
-- x = 4, y = 8, 其余值被忽略-- 函数与其他类型一样为一等公民
-- 同样有 local/global 之分
-- 像 Javascript 一样定义
function f(x) return x * x end
f = function (x) return x * x endprint 'Hello World!' -- 只有一个`字符串`参数时可省略括号----------
- 3. 表(Table)
----------
-- 表是 Lua 中唯一的复合类型
-- 像 PHP 中的数组或 Javascript 中的 Object 一样
-- 可用作 list/dict/map-- 默认以字符串作为 key
t = {key1 = 'value1', key2 = false}
-- 像 Javascript 一样以 . 取值
print(t.key1) --> "value1"
t.key3 = {} -- 加入新的键值对
t.key2 = nil -- 销毁一组键值对-- 理论上任何非 nil 的变量都可以作为 key
u = {['@!#'] = 'qbert', [{}] = 1729, [6.28] = 'tau'}
print(u[6.28])  --> "tau"
a = u['@!#'] -- a = 'qbert'
b = u[{}] -- b = nil;像 Javascript 一样 {} 会创建新的对象-- 因此不要用蛋疼的 key 值,老老实实用字串或数字-- 同字符串一样,只有一个表作为函数的参数时可以省略括号
-- 为了一个括号增加阅读难度,得不偿失
function h(x) print(x.key1) end
h{key1 = 'Sonmi~451'}  --> "Sonmi~451"for key, val in pairs(u) do  -- 像 Python  一样的键值迭代print(key, val)
end-- 像 Javascript 一样的全局作用域 _G
print(_G['_G'] == _G) --> true-- 省略 key 之后即可变身为 list
-- 实际上是以递增自然数为 key
v = {'value1', 'value2', 1.21, 'gigawatts'}
for i = 1,
#v do  -- 像 Bash 一样,#v 表示列表长度print(v[i])  -- 像 Matlab 一样,列表索引从 1 开始
end----------
- 3.1 Metatables & metamethods
----------
-- 元表(metatable)就是表的表,像 Javascript 的原型(prototype)一样
-- 为表重载一些元方法(metamethods)f1 = {a = 1, b = 2}
f2 = {a = 2, b = 3}
-- s = f1 + f2 为错mm = {}
function mm.__add(x, y)sum = {}sum.a = x.a + y.asum.b = x.b + y.breturn sum
endsetmetatable(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(...)----------
- 3.2 类风格的 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)
endmrDog = Dog:new()                       -- 7.
mrDog:makeSound() --> "I say woof"-- 1. Dog 像类但实际是 Table
-- 2. Dog:new(...) := Dog.new(self, ...)
-- 3. newObj 作 Dog 的实例
-- 4. self 是 Lua 中默认的参数,在这里 self = Dog
--    继承的时候可以改变
--    self.__index 与 self 的元方法 __index 不是一回事
--    self = {__index = self, metatable = {__index = ...}}
-- 5. setmetatable(newObj, self) 相当于 setmetatable(newObj, {__index = self})
--    赋予实例所有类方法
-- 6. 同 2.
-- 7. mrDog = Dog.new(Dog)-- 继承
LoudDog = Dog:new()
function LoudDog:makeSound()s = self.sound .. ' 'print(s .. s .. s)
end
seymour = LoudDog:new()
seymour:makeSound() --> "woof woof woof"----------
- 4. 模块
------------ 以下来自文件 mod.lua
local M = {}local function sayMyName()print('Hrunkner')
endfunction 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!"

转载于:https://my.oschina.net/shou1156226/blog/653086

Lua_手册_代码版相关推荐

  1. java web开发学习手册_【Java手册】Java开发手册_华山版(2019.06)

    版本号:1.5.0 更新日期:2019.06.19 制定团队:阿里巴巴与Java社区开发者 更新亮点:华山版,新增21条设计规约,修改描述112处,完善若干处示例 2017年春天,<阿里巴巴Ja ...

  2. java三目表达式_史上最强《Java 开发手册》泰山版王者归来

    简介:潜力修炼一年之久的<Java 开发手册(泰山版)>今天发布!此次共计新增 34 条规约,修改描述 90 处,其中错误码规则更是第一次提出完整的解决方案,大家参考错误码示例表,欢迎大家 ...

  3. python 通信系统仿真_深入浅出通信原理连载22-40(Python代码版)

    深入浅出通信原理Python代码版 深入浅出通信原理是陈爱军的心血之作,于通信人家园连载,此处仅作python代码笔记训练所用 陈老师的连载从多项式乘法讲起,一步一步引出卷积.傅立叶级数展开.旋转向量 ...

  4. python频域三维图_深入浅出通信原理连载1-21(Python代码版)

    深入浅出通信原理Python代码版 深入浅出通信原理是陈爱军的心血之作,于通信人家园连载,此处仅作python代码笔记训练所用 陈老师的连载从多项式乘法讲起,一步一步引出卷积.傅立叶级数展开.旋转向量 ...

  5. 学术英语视听说2听力原文_学术英语视听说(2教师手册第2版新世纪大学英语系列教材)...

    导语 内容提要 杨惠中和王跃武主编的<学术英语视听说(2教师手册第2版)>充分体现了学术英语课程的内容特点.语言教学必须围绕一定的题材来选择语言素材.学术英语的题材选择要有知识性.趣味性. ...

  6. 屏通触摸屏软件操作手册_屏通人机界面软件操作手册快速入门版.pdf

    屏通人机界面软件操作手册快速入门版 PM Designer 触控大师 屏 通 人 机 界 面 软件操作手册 快速入门版 0 目 录 第一章 PM Designer触控大师软件简介3 1.1 软件功能介 ...

  7. python opencv手册_教你用Python实现5毛钱特效(给你的视频来点料)

    一.前言 请务必看到最后.Python牛已经不是一天两天的事了,但是我开始也没想到,Python能这么牛.前段时间接触了一个批量抠图的模型库,而后在一些视频中找到灵感,觉得应该可以通过抠图的方式,给视 ...

  8. 阿里新版java开发手册(2019华山版、2020泰山版)

    pdf文件链接: https://pan.baidu.com/s/15Q_qCyqLTG0wBFyHVM3zog 提取码: in6y 目录 一. 编程规约 (一) 命名风格 (二) 常量定义 (三) ...

  9. 《阿里巴巴Java开发手册(正式版)》--MySQL规约

    (一)建表规约 1.[强制]表达是与否概念的字段,必须使用 is_xxx的方式命名,数据类型是 unsigned tinyint( 1表示是,0表示否),此规则同样适用于 odps建表. 说明:任何字 ...

最新文章

  1. 「机器学习速成」训练神经网络:反向传播、梯度爆炸消失Dropout
  2. idea如何打war包?(部署tomcat后具有class文件)
  3. 给IC 应届毕业生的 忠告【转载】
  4. SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式
  5. 解决android中Layout文件下的xml文件配好后,R类中不能自动生成相应代码
  6. jQuery遍历div,判断是否为空,为空时执行某个操作
  7. JS将指定的时间戳转为UTC时间
  8. 终端定时任务 开始缓冲_如何开始使用终端以提高生产力
  9. B. Trouble Sort Codeforces Round #648 (Div. 2)
  10. git checkout 和 git reset
  11. Elasticsearch内存
  12. php基础_变量和比较符
  13. java 线程管理框架_实现 Java 多线程并发控制框架
  14. C++静态数据成员与静态函数(案例分析)
  15. 4.5_abstract_factory_创建型模式:抽象工厂模式
  16. cas云计算机管理平台添加加密锁,CAS云计算管理平台安装手册.docx
  17. JavaScript 火的有点过头了,但又能火多久呢?
  18. 【SVM回归预测】基于matlab布谷鸟算法优化SVM回归预测【含Matlab源码 1422期】
  19. 深入浅出GAMP算法(中): GAMP
  20. 智能卡APDU的命令及其解析

热门文章

  1. java与数据库连接的几个步骤
  2. 读Pyqt4教程,带你入门Pyqt4 _007
  3. Oracle:lsnrctl start Timeout or Adapter error
  4. 项目管理沙龙第十一次聚会纪要--当敏捷没有共识的时候
  5. linux 建立用户kde目录,安装KDE Plasma后,你要做的七件事
  6. g的python实现_Python Gevent
  7. 华中师范大学邮箱matlab,正版软件管理与服务平台(华中师范大学)
  8. python语言开发环境搭建_Python开发环境搭建-Go语言中文社区
  9. Python字符串splitlines()
  10. java 优先队列_优先队列Java