设为首页收藏本站 国外访客:

 找回密码
 立即注册
搜索
查看: 3012|回复: 0

[教程/工具] 龙途传奇lua基础语法

[复制链接]
灌水成绩
18238
96
18746
主题
帖子
积分

等级头衔

ID : 1

管理员

积分成就 威望 : 8
贡献 : 9
下载币 : 387
在线时间 : 1773 小时
注册时间 : 2013-9-5
最后登录 : 2026-7-11

发表于 2026-6-10 16:11:59 | 显示全部楼层 |阅读模式 IP:广东东莞
免责
Lua基础语法(详情可查看Lua程序设计.chm)
5 u7 B# O+ y1 I
6 g7 Y1 r1 s4 `% y6 e7 u

+ b# Y: T9 |( b8 |9 l7 x
) x( a$ m: F& p2 A9 t) ]0 J

7 b" N  }5 l  ~  g& Q5 h
保留字(每个都有单独含义)and        break      do         else       elseif8 M9 S, V# A7 R5 I: }9 m3 L% Y
end        false      for        function   if5 N1 r: j: N; @1 ?" z4 m( O- S
in         local      nil        not        or) u, l4 n3 H& V! S
repeat     return     then       true       until9 ^! f7 j% {4 G+ C
while
+ A7 W, {) A7 v$ _- X7 C& U1 _4 K
注释(注释后代码不会执行)单行注释:--
9 I$ u3 i- k1 K& J8 W9 y  R2 n; N$ T) r! D& f
多行注释:--[[    --]]
- O) c  q+ B: i
3 r- Z# S' H4 E) _' M" H9 v; a8 [- R
如下:
6 J5 a7 N/ s2 }# F+ q--[[: Q7 L8 L4 G( {3 K  m6 h; `

$ l. X! U7 \1 Y1 @5 X6 I+ gprint(10)         -- no action (comment)/ }/ w6 Y2 M6 u8 }

8 [/ {# K, E1 _& S" }4 k: T--]]0 U; L4 F* L5 o7 w1 G
Nil(空值)Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量负nil可以删除该变量。
: T, z% t; n8 u  G1 c$ e0 A, H0 i
- ~( ?( N6 K1 c! Q1 ?/ @
: H" z( w6 z% P6 n% [, j" s6 ^
Booleans(布尔值)两个取值false和true。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。& H- s6 t9 v8 A

3 E# N0 r$ k- J. M3 O) o; p6 h
Numbers(数值)表示实数,Lua中没有整数。一般有个错误的看法CPU运算浮点数比整数慢。事实不是如此,用实数代替整数不会有什么误差(除非数字大于100,000,000,000,000)。Lua的numbers可以处理任何长整数不用担心误差。你也可以在编译Lua的时候使用长整型或者单精度浮点型代替numbers,在一些平台硬件不支持浮点数的情况下这个特性是非常有用的,具体的情况请参考Lua发布版所附的详细说明。和其他语言类似,数字常量的小数部分和指数部分都是可选的,数字常量的例子:
4 z3 H7 @8 W$ o* b: Y6 R% n. {- S$ F3 z1 f2 F5 {+ z% k6 Z8 l2 T
4      0.4    4.57e-3       0.3e12     5e+20
" b/ v) V; O7 r+ R0 j$ m  M
Strings(字符串)指字符的序列。lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。这意味着你可以存储任意的二进制数据在一个字符串里。Lua中字符串是不可以修改的,你可以创建一个新的变量存放你要的字符串如下:+ u: {& q( V+ z; X) H
9 L+ O% s6 d  ^9 z" j
a = "one string"" l  ^8 I7 k: X  s% M$ f/ q
4 U/ _1 j, L; t
print(a)          --> one string% |8 m$ o3 a+ G/ G* S  ~+ x
Functions(函数)函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数的参数,也可以作为函数的返回值。如下:5 S5 N, `: a$ C" e! u' y

- _5 `9 ?% E" a4 ]! g- {function 函数名(human)/ G6 k: o9 z& k- v
    return 1      --返回一个数值:1
5 g: b1 x0 q  \0 [: T; B1 k! ^) Eend
8 U2 _% n, R3 x. I; R. G
算术运算符二元运算符:+ - * / ^  (加减乘除幂)4 C( [, F" j+ }( X
, z- L5 m- y+ T0 @
一元运算符:-  (负值)
9 y3 A" c( G* G3 J* i9 C
. R2 }! O& ^, N这些运算符的操作数都是实数。
& R* {, l$ |. W  y
/ J6 r" z* K- Q6 G! S
关系运算符<      >      <=     >=     ==     ~=$ u9 |/ |* o; ?7 I
, ?7 f% x' @3 M# J: }; I3 t! n
这些操作符返回结果为false或者true;==和~=比较两个值,如果两个值类型不同,Lua认为两者不同;nil只和自己相等。Lua通过引用比较tables、userdata、functions。也就是说当且仅当两者表示同一个对象时相等。; B) W  @% R# N& Q1 w4 j
a = {}; a.x = 1; a.y = 08 b& L# I9 P! a8 V, U+ K

( ?( U" c3 J% m$ G: ^& ~b = {}; b.x = 1; b.y = 03 p9 t% X$ h& }2 m" \3 b: g" f

5 z. [% r; n. f8 M' k4 q/ L/ Ic = a% ~! k; n; |: f, b8 c  A

1 a5 p. Z  ?0 v7 I. I3 ]  ja==c but a~=b
0 _! N4 G! o- _. {7 `0 ~1 j
逻辑运算符and    or     not
% l  b+ c' K2 M7 a0 ~$ R
6 D/ L( K0 |0 A$ b/ C4 J逻辑运算符认为false和nil是假(false),其他为真,0也是true.0 w; F+ K! K! C# h& ?' _

; Z: H4 ]$ |" _and和or的运算结果不是true和false,而是和它的两个操作数相关。- l0 ]! `7 I7 \" k, \' s! j/ C0 T
1 v$ v( v, c  c- M  u
a and b       -- 如果a为false,则返回a,否则返回b
9 n9 K  a( q4 {) r1 ^1 B; Z4 I, z' P' o$ ^* @4 f! t, v
a or  b        -- 如果a为true,则返回a,否则返回b2 U3 d: K! Y& c/ w
例如:
- I* P" w3 F; c+ P: ~+ T  L, x$ D7 B8 ]0 k' N* w
print(4 and 5)           --> 5! S) Z4 I: V/ N* ]2 {, B

; |( V# a  e3 qprint(nil and 13)        --> nil
6 l: A3 r. ~# w, R8 w+ L* O5 `9 c# c# M
print(false and 13)      --> false
: \9 m* T* }" p  w4 _2 j# J: o" F/ Q4 y) c; F
print(4 or 5)            --> 4% [+ Z$ L3 v: h+ e8 V

! D+ n4 _; v  ^+ m4 q, _print(false or 5)        --> 59 R- ]- R% f; A2 f& c, ^+ V* e
连接运算符..         --两个点) B9 [2 c* Y+ j$ O

" ~( u8 H& N8 y3 r9 c6 ~字符串连接,如果操作数为数字,Lua将数字转成字符串。
* A3 P' a  X; t9 E/ B* r
print("Hello " .. "World")      --> Hello World
; V$ F! e! S7 @+ d
/ i- C/ K* Z2 p/ aprint(0 .. 1)                   --> 01" }0 n4 X3 p3 G
优先级从高到低的顺序:
/ N7 H9 _( O8 J^
5 a# u' Z0 G$ i% @1 q; ^+ Onot    - (unary)4 |3 ]( Y1 H: N+ e4 W7 L" K
*      /
2 l  A. j8 B; h: n9 o& H+      -
9 y. R, _$ \2 V5 q! w..; V& C, P- h% S* |) G
<      >      <=     >=     ~=     ==
* E2 T, f# q' M: s; y& p4 ]and
  V% Q* C; i4 Y0 v2 a9 R6 u2 C0 Dor

% N( r4 y8 u& d+ P* U0 D
表的构造构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:9 G7 P2 P9 t7 r2 Y8 p6 n
6 b: u0 m6 U, ~2 Q
days = {"Sunday", "Monday", "Tuesday", "Wednesday",
! x5 _2 U5 r' ^- g. r* o0 i, t' c! u. y1 t
        "Thursday", "Friday", "Saturday"}
: F9 X2 ]9 q+ I9 V. M; [4 @, r9 r! h5 b6 r3 V
print(days[4])       --> Wednesday4 J5 r& w1 U  i4 Y5 ~& j+ X
7 D% a' Y. R  l% S: g$ J- N4 I
赋值语句赋值是改变一个变量的值和改变表域的最基本的方法。a = "hello" .. "world"
" z) n, k5 b0 H' d% |" F9 [6 [! {8 J# N5 h
t.n = t.n + 1, d1 A2 f* b: Z. V9 @5 c$ P
局部变量与代码块使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)。
! A! G, T# W' R# V
x = 10
( G8 S: D; y/ E+ K# C* h
5 Z5 v4 D3 @  ^  i0 j+ y9 klocal i = 1              -- local to the chunk$ j* d& S& W& \2 }

( E: p9 ^2 S" ^0 R, D* bwhile i<=x do
. T" w- d+ A, T8 g" e0 {  m8 R3 i0 n1 q( o* T& ~9 {1 a
    local x = i*2        -- local to the while body, A" t7 g9 Z9 i

; `; w) P+ y2 e- L    print(x)             --> 2, 4, 6, 8, .../ H- X: x  ]8 ~1 Z4 v* T
, Y- L: @* o, \. i5 L; z
    i = i + 1# G0 }1 y6 `/ _, c
* Z# l) v* l* Q( H( p
end
$ Z" Y8 k% `! h9 k# U. l. ]$ a
控制结构语句(if语句)控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,其他值为真。
0 I- B+ ]$ e3 M
if conditions then
& a( ]# [% E4 K- \* b& @! N5 v( o
" h2 n( w! }* q  J7 |    then-part! k5 o+ P/ E9 u* K! B' `2 u% y$ Q- w" _

3 f2 u( d4 s2 g0 I  Bend;2 E3 L$ p' J  w9 Y' ?3 n3 s; O

# T& b1 r3 D4 u3 M3 E3 c1 Kif conditions then
1 ^3 K2 r9 s; n" a  ?. S
$ p) @; h3 {* B5 @5 [6 o    then-part
, Z- R! g8 L" N0 O
, R* M! M* |. i- Y/ ~: `else
* r7 Y4 S4 p5 e- U/ i! a% _+ [+ y4 a6 A" O
    else-part  {) k3 _# i8 C! W
* z& ]% k( v9 q. x) n- d- a
end;
& p6 F. c! Q* w  T  Y; K0 }: Y
break和return语句break语句用来退出当前循环(for、repeat、while)。在循环外部不可以使用。
& @0 d; [, `% F+ X% ?7 F, b. e+ S! [& w7 {* B
return用来从函数返回结果,当一个函数自然结束时,结尾会有一个默认的return。
2 W+ Q- T" i0 _+ H! T1 ~
# ~; Z' E' T* b1 v( B6 f$ zLua语法要求break和return只能出现在block的结尾一句。
例如:
- h$ ~0 u/ a0 f( u1 F2 t
/ m) f; B4 j% |* G6 J4 N$ N0 d2 H6 slocal i = 1
% W7 \  r( e: w8 [9 M8 h7 a3 b
while a do; s' N! s% Y4 S1 D- p7 X  |8 I
/ L, Y8 x7 P6 Z2 i5 N0 N  U
    if a == v then break end
% u" H, g7 G) a, T" ?' R/ E0 a, E' k
( O( a. a% J( O5 V! g    i = i + 1$ @3 x: t& f2 `8 ]0 a+ X
1 @* `# H3 I: m! A6 Y
end
6 B5 d0 y8 u) A+ i0 d
函数定义函数有两种用途:1.完成指定的任务,这种情况下函数作为调用语句使用;2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。
9 d5 A1 K! g2 W0 c4 D2 w
语法:
  V5 Y. W' m! c: Y0 K+ B  U- T2 r0 J; l$ @% b
function func_name (arguments-list). h  {* u* s" v8 S
9 K0 y" j. K) N/ v
    statements-list;
! w: p" b) n5 @: }7 T
, t; d- I* T4 W8 Z" wend;) J: ^$ l% g1 n& _. }, B+ o. P& p- y
: D. a- {" M: z& }4 Y  p6 {
函数调用调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。print(8*9, 9/8)
4 y/ y# T2 V% g9 Q1 j  ~
9 f$ e3 a: O, R( ea = math.sin(3) + math.cos(10)* i- z5 l8 V" Z6 E5 D  h  U

4 b  m* q- ]- v! gprint(os.date())
7 x, m) k: S4 W" X  a( Y
免责
帖子地址打造全网最多免费游戏网站
今日来客 列表模式
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|蔡州手游 |网站地图 wapmz.com

GMT+8, 2026-7-11 16:45

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表