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

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

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

[复制链接]
灌水成绩
18494
98
19014
主题
帖子
积分

等级头衔

ID : 1

管理员

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

发表于 2026-6-10 16:11:59 | 显示全部楼层 |阅读模式 IP:广东东莞
免责
Lua基础语法(详情可查看Lua程序设计.chm)
3 W2 p; w2 s, S! V6 ~' ?! X  i

9 d& k2 g& l' i: r

3 \) X8 U$ G0 ?! S% y
& \9 @: c: K! h* n4 _

0 z: L# p1 a- G! ~
保留字(每个都有单独含义)and        break      do         else       elseif& B( O3 ~; X5 a3 I2 I. h
end        false      for        function   if
8 A5 }6 N& E5 B9 B: R: ain         local      nil        not        or4 Y. \& B; @' h, b2 G% W0 s
repeat     return     then       true       until2 \1 q: n( R; L' A8 |5 L
while

) b; N* c; w) y7 z
注释(注释后代码不会执行)单行注释:--
  E+ z: Z8 F, O0 _, T3 o0 m& l# o1 A  |) R3 e8 b" `% l; b2 f1 L( G
多行注释:--[[    --]]( V. f/ H& y2 N+ j6 ?& ~" @

' K- }7 x; B" N) |+ t  ]# ?
如下:
' i, Z) H- B. ~  P# X; E& P2 ?2 }--[[
* e  p: e, |' \, S7 T& o/ D
+ h6 L2 t' X% j& a; x  Gprint(10)         -- no action (comment)
3 W! S6 X  o/ _. N7 w. x. x8 R; U0 E6 @
--]]
# `3 d0 o/ `1 {# v
Nil(空值)Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量负nil可以删除该变量。; g( W! ]2 D! q2 p, {

+ D4 U$ K' {" k+ |' g0 g: {
8 a2 m* D4 Y, G( B5 |) U4 b
Booleans(布尔值)两个取值false和true。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。1 d  P, I. h! M. Q' \
% `% m, w2 _1 o* E4 d0 j
Numbers(数值)表示实数,Lua中没有整数。一般有个错误的看法CPU运算浮点数比整数慢。事实不是如此,用实数代替整数不会有什么误差(除非数字大于100,000,000,000,000)。Lua的numbers可以处理任何长整数不用担心误差。你也可以在编译Lua的时候使用长整型或者单精度浮点型代替numbers,在一些平台硬件不支持浮点数的情况下这个特性是非常有用的,具体的情况请参考Lua发布版所附的详细说明。和其他语言类似,数字常量的小数部分和指数部分都是可选的,数字常量的例子:
" [, Z- L! q, r; x8 N; s2 V% T2 ]6 U1 ~( T8 x; ~. b2 B
4      0.4    4.57e-3       0.3e12     5e+20
7 }) h5 ^# N) h2 p
Strings(字符串)指字符的序列。lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。这意味着你可以存储任意的二进制数据在一个字符串里。Lua中字符串是不可以修改的,你可以创建一个新的变量存放你要的字符串如下:
) }, |/ [' Q$ p0 b& i2 B7 |( p6 X4 ^0 k
a = "one string"0 o8 x1 x$ g! g) f$ t

3 o2 r& S+ Q3 H; g% a1 Oprint(a)          --> one string, e( z2 {4 |) ~( h% I" h
Functions(函数)函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数的参数,也可以作为函数的返回值。如下:
0 h" J3 G* y& |# Q4 U! b0 j2 U4 u* E. D3 o: z, J2 S
function 函数名(human)& K+ o7 @" n9 B  m6 S, d
    return 1      --返回一个数值:1
. r9 |% H0 f# t/ o9 X; _8 S% ]3 _8 xend
8 K4 U  u% [, o: ~9 M: n4 K9 g
算术运算符二元运算符:+ - * / ^  (加减乘除幂)% b' J. q. l: L  ~$ k: m
+ B) t% A* r" C: `5 [- L3 M, z
一元运算符:-  (负值)
0 o& T0 o4 ]$ d, t2 P
9 V  f: E$ T) N" r$ ^0 i这些运算符的操作数都是实数。) M. b. p7 o5 F4 [
, d% B; G3 s. `/ {: h0 c
关系运算符<      >      <=     >=     ==     ~=2 d8 J4 E4 a2 l6 d5 R" M7 X

) Q5 T' R2 _/ a; ~8 Y# @: A) V这些操作符返回结果为false或者true;==和~=比较两个值,如果两个值类型不同,Lua认为两者不同;nil只和自己相等。Lua通过引用比较tables、userdata、functions。也就是说当且仅当两者表示同一个对象时相等。
$ i# _! t  R0 I. O% b" E
a = {}; a.x = 1; a.y = 0
" ?' Y6 _5 m' E: ]" o. h; l0 a
b = {}; b.x = 1; b.y = 00 R% Y4 y. v/ K* V6 Z# @/ S
1 M6 [+ D$ ?+ r0 B
c = a$ _* N9 @1 S" g4 z3 a
+ l9 u' M' i  W
a==c but a~=b. T7 `) Y# A9 R( U( N
逻辑运算符and    or     not
. K' n  w' H1 v. O, ~
3 d, G! G& W4 _: z逻辑运算符认为false和nil是假(false),其他为真,0也是true.: k0 ~: P1 U# X# m1 B' c

' k& z( E- M$ b/ |/ @% S: W" s5 }and和or的运算结果不是true和false,而是和它的两个操作数相关。
; R$ S/ }# ^. h6 H. r+ Y- b9 o
' R+ C: d: y' X1 x/ C5 I: `! V8 }a and b       -- 如果a为false,则返回a,否则返回b* R" N7 W- b5 ^

- n3 O8 X- Q7 L3 ]8 Q+ d% l3 |5 ca or  b        -- 如果a为true,则返回a,否则返回b
9 i' K% U2 u- G1 d- d$ R
例如:
  L$ [9 R: B5 @9 ^+ N
# _2 n4 [2 J: y- b! |7 T- eprint(4 and 5)           --> 5. l; N& c' W) {+ X$ w# p( e: i' N
, Y6 T+ d9 u, `! U# g  v' a
print(nil and 13)        --> nil1 D( o% o) `8 i, W; X
4 }% B" b6 J$ n4 b8 V6 V
print(false and 13)      --> false
5 u$ h4 O9 `  T; c8 j: g  w" S' {2 H/ i
print(4 or 5)            --> 4
, Z& L( u0 R5 G/ M2 U  ~* K$ v
  L, G6 l3 k, ~print(false or 5)        --> 5
) }2 l& C6 {9 a4 |2 a
连接运算符..         --两个点2 ^# h4 |% G$ `$ _6 N8 I
3 A) j( F) ?5 g; e
字符串连接,如果操作数为数字,Lua将数字转成字符串。6 w9 V& G8 [/ O: c' a
print("Hello " .. "World")      --> Hello World
8 J. v* ^1 s3 J1 J' e9 V4 t/ O3 t
print(0 .. 1)                   --> 01/ d7 C: o0 ~( }
优先级从高到低的顺序:
9 @5 a4 T% I9 E0 t" a7 F; Z1 O^
8 e6 o& r' N$ J  s) t/ Nnot    - (unary)
/ {& u( D, s1 o4 I( r9 S*      /1 q2 t; B3 s$ V3 e3 }) d( z! ]
+      -
2 F) R3 ]6 Z8 T! ~..
2 O/ |7 X( m% E/ F. O<      >      <=     >=     ~=     ==$ X. a% ^. I" K/ L7 a( @. c- g
and
: x3 m% S- b1 K1 Q2 uor

3 _  G6 @4 M$ F( v
表的构造构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:
% N5 t0 F% o/ O! |0 }( u8 t( P9 N1 p8 Y: C5 ~
days = {"Sunday", "Monday", "Tuesday", "Wednesday",
. |* n5 f, h0 k: R) Y8 {* T" V6 F. Z" X6 d% W
        "Thursday", "Friday", "Saturday"}
5 h  j! j; l# Z' b9 T  q$ W  o& B1 ^1 `$ c. t/ g9 [2 t6 c
print(days[4])       --> Wednesday1 |: w& ?0 Y! d* x+ ]: x8 t
# p7 Q% b: ]0 ~5 z+ v* a  G' p0 j
赋值语句赋值是改变一个变量的值和改变表域的最基本的方法。a = "hello" .. "world": \$ ]2 ]1 a  M9 w9 d
; B; F! i$ u- e, n% @8 }, a
t.n = t.n + 1
! \8 S' r& o# M
局部变量与代码块使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)。
( Y% ~3 h& `1 N' L9 O
x = 10
* k$ k7 g; |/ n# @4 i; |6 P- H7 m" n$ h% E& W. R
local i = 1              -- local to the chunk) v2 u' L6 K6 |6 m, m

/ m. ^3 `( O+ u( Z/ r0 jwhile i<=x do
" _) D! s+ E- A! _% P, e& f$ u. N7 G: A5 z
    local x = i*2        -- local to the while body
2 D# i  A) t0 m8 o. f  Y4 a4 u" D1 [9 @  K! J6 @3 o+ J
    print(x)             --> 2, 4, 6, 8, ...
, B1 o+ K7 i: y2 d; }
# ?4 w% i# W' P* u! D    i = i + 1
4 V, I& b/ ?+ \- P+ A( C% p$ j( G
$ t8 ~3 w* c( ]6 ^( aend
/ C0 I% n; T# G! Y0 ?( f
控制结构语句(if语句)控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,其他值为真。
, \  j8 H' T0 R- J8 a5 N
if conditions then
- m$ E  {6 f2 ?& m3 i0 v3 l; Y( }5 U: y6 w1 U9 Z- V
    then-part! D7 ?: x9 v) V# q

: A) M" q4 F% lend;) C4 w0 m4 e( V3 a8 L
/ M+ ^- q; Z! C3 x1 j: }6 [& Z- s8 J
if conditions then8 w6 I! P0 c. c0 b4 [' U
$ {5 f0 P3 g6 h: `5 o: e
    then-part
6 P2 w8 |! Q7 U! t6 m+ d6 e& [& _+ d4 n  t
else7 Y% X: K1 n4 b- N4 ~1 G3 v
! u' `% L& y) Q1 a* u% l
    else-part0 n5 [& z' T9 x- y4 Z4 o8 h
& R! ]5 H9 X# T+ _, f+ y
end;
+ P  A1 d3 n/ D. K! E
break和return语句break语句用来退出当前循环(for、repeat、while)。在循环外部不可以使用。" K. Z. I1 t4 b/ [. h

6 \$ S5 `1 g$ z1 j) c: [2 `7 nreturn用来从函数返回结果,当一个函数自然结束时,结尾会有一个默认的return。
4 I& p* Q) d! q6 X( ?8 l
2 v) Y0 z) Q+ V" kLua语法要求break和return只能出现在block的结尾一句。
例如:
( W- a6 m8 q3 g* s7 j' V5 \% c1 w* c" P4 q6 P. Q
local i = 1
& W$ C. J( {' C
& |7 L$ ~3 \+ V9 {8 R$ kwhile a do. z1 t9 A& R( T# k, E8 `# d6 u
7 X4 b3 H  u, g* n# Y
    if a == v then break end# {: H/ T. c9 U7 l/ v2 ?7 t

( W' D; s% _; Q1 s6 m    i = i + 16 e4 b3 G3 n. X+ c! y; s' T

9 r9 u3 p( ^8 c* M! a: ~( e+ N# T% [end
# q" y+ C- ?" X- G
函数定义函数有两种用途:1.完成指定的任务,这种情况下函数作为调用语句使用;2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。
' C6 E. L' h- b2 E8 p% L/ R& X
语法:
7 Q# s& n7 t, x% @! J1 Y5 ?* H4 c# |; \5 c4 C
function func_name (arguments-list)
8 T0 V, d3 e' Q2 @1 t" r  F, h2 T! f. E( f  b( A3 m. E
    statements-list;
9 e/ {" U0 v" V* J, B+ U8 R( d3 Z$ L1 K- G
end;
/ u1 w- j7 b) b- C9 ]+ ?2 u* c6 C2 ]0 E
函数调用调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。print(8*9, 9/8)
! ^! H4 \" B& I; A6 B* F0 r3 r3 t" r
a = math.sin(3) + math.cos(10)
0 M2 `# p9 |& n0 M& y# N2 Z8 E" k5 ~
print(os.date())

3 q5 i; |$ g3 O
免责
帖子地址打造全网最多免费游戏网站
今日来客 列表模式
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-26 07:12

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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