西安有一个电影他要拉投资做网站,做网页的素材,科技有限公司的经营范围,做网站的时候遇到的问题2 初级阶段 —— 基础语法和数据类型 文章目录 2 初级阶段 —— 基础语法和数据类型2.0 关键字(keywords) #x1f525;2.1 注释与标识符2.1.1 注释2.1.2 标识符 2.2 变量与赋值2.2.1 所有变量默认是全局变量 ≠ local, 有一个例外2.2.2 local变量是局部变量, 以end作为边界2.… 2 初级阶段 —— 基础语法和数据类型 文章目录 2 初级阶段 —— 基础语法和数据类型2.0 关键字(keywords) 2.1 注释与标识符2.1.1 注释2.1.2 标识符 2.2 变量与赋值2.2.1 所有变量默认是全局变量 ≠ local, 有一个例外2.2.2 local变量是局部变量, 以end作为边界2.2.3 多个变量同时赋值且变量没有类型, 只是一个引用2.2.4 用全局变量给局部变量赋值 2.3 数据类型数字、字符串、布尔值2.3.1 数值类型2.3.2 字符串 —— #获取长度/..连接符 2.3.3 只有nil和boolean的false会使条件表达式为假, 0或都会判为真 2.4 运算符和表达式2.4.0 算数运算符2.4.1 逻辑运算符and/or/not2.4.2 比较运算符 / ~ / / / / 2.4.2 特殊的表达式 往期回顾 2.0 关键字(keywords)
The following keywords are reserved and cannot be used as names:
andbreakdoelseelseifendfalseforfunctionifinlocalnilnotorrepeatreturnthentrueuntilwhile
Lua 与 C对比:
do ... end 相当于 { ... }用于代码块的定义。除非声明为 local否则变量不以 do ... end 区分生命周期默认都是全局变量。只有 nil 和布尔类型的 false 会使条件表达式为假0 或 都会判为真。语法糖 lhs and rhs如果 lhs 为真返回 rhs如果 lhs 为假返回 lhs。lhs or rhs如果 lhs 为真返回 lhs如果 lhs 为假返回 rhs。
2.1 注释与标识符
2.1.1 注释
在 Lua 中注释用于对代码进行解释说明而不会被实际执行。Lua 支持两种注释形式
单行注释使用两个连字符 -- 开头后面跟着注释内容。多行注释使用两个连续的方括号 --[[ 开头以及两个连续的方括号 --]] 结尾之间是注释内容。
-- 这是单行注释--[[
这是
多行
注释
--]]2.1.2 标识符
在 Lua 中标识符用于命名变量、函数和其他数据。标识符的命名规则如下
以字母大小写均可或下划线 _ 开头后面可以跟字母、数字和下划线。Lua 是区分大小写的因此 myVar 和 myvar 是不同的标识符。
2.2 变量与赋值
2.2.1 所有变量默认是全局变量 ≠ local, 有一个例外
print(daokeke) -- nil
do daokeke myself -- 所有变量默认是全局变量
end
print(daokeke) -- myselfexcept:
for i 1, 5 do -- 这个i为局部变量 print(i)
end
print(i) -- nil2.2.2 local变量是局部变量, 以end作为边界
print(daokeke) -- nil
do local daokeke myself -- local变量是局部变量
end
print(daokeke) -- nil2.2.3 多个变量同时赋值且变量没有类型, 只是一个引用
local x, y 10, 20
x, y y, x -- 先取值, 再赋值, 效率不高, 但是写法简单, 不需手动引入第三个变量
print(x, y) -- 20 10x a
y b
print(x, y) -- a ba 1,2,3
print(a) -- 1
a,b 1,2,3
print(a, b) -- 1 2
a,b,c 1,2,3
print(a, b, c) -- 1 2 32.2.4 用全局变量给局部变量赋值
print(daokeke) -- nil
daokeke good!
do local daokeke daokeke-- 用全局变量给局部变量赋值 daokeke boy! print(daokeke) -- boy!
end
print(daokeke) -- good!2.3 数据类型数字、字符串、布尔值
2.3.1 数值类型
不区分整形(32bit)和浮点型, 认为全部都是浮点型即可(64bit); 可以完全当成计算器来用
print(type(123)) -- number
print(type(3.14)) -- number
print(type(2.99e10)) -- numberprint(1/2) -- 0.5
print(2^0.5) -- 1.4142135623731
print(12345 1.2345e4) -- true2.3.2 字符串 —— #获取长度/..连接符
单引号/双引号都可以, 根据内容自由选择
Ref. [[1000.03.CS.PL-Lua-Lua字符串的实现及其编码实践]]
print(I am so cool!)
print(\I am so cool!\she said) -- I am so cool!she said
print(I am so cool!she said) -- I am so cool!she said-- [[ 后跟换行, 会保留到内容中
ctx [[
Im so cool!she said]]
print(ctx) -- Im so cool!she said-- 可以自定义界定符, 任意数量号都可以, 比如包含65535(高版本更多)以内的html
ctx [[Im so cool!she said]]
print(ctx) -- Im so cool!she said
print(#ctx) -- 22
print(ctx.. with smiles.) -- Im so cool!she said with smiles.2.3.3 只有nil和boolean的false会使条件表达式为假, 0或都会判为真
-- 只有nil和boolean type中的false会使条件表达式为假, 0或都会判为真
print(type(nil)) -- nil
print(type(true)) -- boolean2.4 运算符和表达式
2.4.0 算数运算符
Lua 支持常见的算术运算符如 、-、*、/ 等。
加法-减法*乘法/除法%取模求余数^幂运算
print(5 3) -- 8
print(5 - 3) -- 2
print(5 * 3) -- 15
print(5 / 3) -- 1.6666666666667
print(5 % 3) -- 2
print(5 ^ 3) -- 1252.4.1 逻辑运算符and/or/not
-- 语法糖: lhs and rhs 如果lhs为真, 返回rhs; 如果lhs为假, 返回lhs
print(0 and 123) -- 123
print(nil and 123) -- nil
print(false and 123) -- false -- 语法糖: lhs or rhs 如果lhs为真, 返回lhs; 如果lhs为假, 返回rhs
print(0 or 123) -- 0
print(nil or 123) -- 123
print(false or 123) -- 123print(false or nil) -- nil
print(not nil) -- true
print(not 0) -- false2.4.2 比较运算符 / ~ / / / /
比较:
print(5 5) -- true
print(5 ~ 5) -- false
print(5 3) -- true
print(5 3) -- false
print(5 5) -- true
print(5 5) -- true2.4.2 特殊的表达式
初始化:
-- x x1 or {xx} x1存在, x为x1;否则为{}
a a1 or 0
print(a) -- 0三目运算符A?B:C:
-- 已知B为真, A真 - A and B - B, B or C - B; A假 - A and B - A, B or C - Ca true
b yes
c no
result a and b or c
print(result) -- yesa false
result a and b or c
print(result) -- no
这样我们在 Lua 中通过一些技巧也能实现类似其他语言的三目运算符功能。这种表达方式非常简洁但在使用时要确保 B 永远为真否则会返回意想不到的结果。
往期回顾
【CS.PL】Lua 编程之道: 简介与环境设置 - 进度8%