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

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

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

[复制链接]
灌水成绩
19101
118
19678
主题
帖子
积分

等级头衔

ID : 1

管理员

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

发表于 2026-6-10 16:11:59 | 显示全部楼层 |阅读模式 IP:广东东莞
免责
Lua基础语法(详情可查看Lua程序设计.chm)
6 j1 W: t  @, Y1 f& A1 y
7 K4 z5 a' X) k5 A

6 U# n/ |. A5 R7 h+ R. ], a

% s7 p/ O2 j( r9 _5 U( n
( W: R) r1 t1 k( C
保留字(每个都有单独含义)and        break      do         else       elseif
' _( I: E6 t, Z6 E# L  Q1 a/ Yend        false      for        function   if9 x3 n- Z; }8 g& h
in         local      nil        not        or
5 p0 ^8 P. s# q$ n3 |2 m9 urepeat     return     then       true       until
- c/ R+ K5 C- g# [" ~while

- \0 ?5 y# t4 P5 h3 ]( w# o6 o
注释(注释后代码不会执行)单行注释:--6 S+ |3 z; E1 c$ d

# ^' }( u5 h6 x多行注释:--[[    --]]4 ?2 Z. a. D2 M7 _  @3 H& \

2 q4 a8 B+ c2 r0 Y
如下:
0 E# N2 z9 z7 Q* g0 O--[[
. v1 V' ?6 N; z7 K$ J% m
# D2 l; C3 @* c3 Pprint(10)         -- no action (comment)
; l& w7 P! X) O- p& u) A% K1 B' n7 ?$ b
--]]
+ H8 M. X; g( M& S! n
Nil(空值)Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量负nil可以删除该变量。4 J; ^* L* o" c+ K- W* h' c4 j

. T, S0 Z6 n5 v5 i( o
+ f0 l4 b, F4 i5 n+ d, I
Booleans(布尔值)两个取值false和true。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。) z: L) T5 ^9 ^% c# p$ {; {# Z* T

* c: P& r# y4 h4 A
Numbers(数值)表示实数,Lua中没有整数。一般有个错误的看法CPU运算浮点数比整数慢。事实不是如此,用实数代替整数不会有什么误差(除非数字大于100,000,000,000,000)。Lua的numbers可以处理任何长整数不用担心误差。你也可以在编译Lua的时候使用长整型或者单精度浮点型代替numbers,在一些平台硬件不支持浮点数的情况下这个特性是非常有用的,具体的情况请参考Lua发布版所附的详细说明。和其他语言类似,数字常量的小数部分和指数部分都是可选的,数字常量的例子:
2 t$ [. i. f; m: C- F2 O9 Q9 _/ @1 k% F) d. q
4      0.4    4.57e-3       0.3e12     5e+202 h: J- k9 s% N% i8 k6 b$ g
Strings(字符串)指字符的序列。lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。这意味着你可以存储任意的二进制数据在一个字符串里。Lua中字符串是不可以修改的,你可以创建一个新的变量存放你要的字符串如下:; V( {8 H) k' n0 Q8 {; ?% w7 f" B
& v; i$ `- M  u( c) M, {1 F: P* {
a = "one string", b7 a2 B+ P& I5 D2 T/ @) ^% c" _& W
" R" d; V  s- C
print(a)          --> one string/ Q  ^0 s7 H7 s, I' P
Functions(函数)函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数的参数,也可以作为函数的返回值。如下:" i3 w5 X/ W$ p5 ^  K0 A9 c3 v
+ h4 R0 u2 F; }4 x6 C! t
function 函数名(human)8 [" C6 c$ P9 e4 e
    return 1      --返回一个数值:10 |8 {$ v# h7 C* `/ x2 H+ [
end
# J1 R1 c0 ]4 a' i
算术运算符二元运算符:+ - * / ^  (加减乘除幂)
$ J* J2 ~% K* X9 Q9 P! A1 w+ E
1 V( G4 z4 s) q! ~. t一元运算符:-  (负值)
4 ]. g+ D5 R8 C8 y4 \# ^" m2 S& l# P4 o: A7 }4 h
这些运算符的操作数都是实数。
5 ~! V, [1 u) X0 C, @0 R8 }& i

- ~6 r# c$ g0 g3 i! g( q5 z
关系运算符<      >      <=     >=     ==     ~=7 I: q; Z1 B: z( Z2 H- o; s
8 L2 i0 O9 Z* |" P, ?/ E3 t3 [
这些操作符返回结果为false或者true;==和~=比较两个值,如果两个值类型不同,Lua认为两者不同;nil只和自己相等。Lua通过引用比较tables、userdata、functions。也就是说当且仅当两者表示同一个对象时相等。
2 W; ?- V3 W; J& w. ^- R- t
a = {}; a.x = 1; a.y = 0
% q, T, U3 U, ^' O7 K  w
( \3 ^$ r! }. P2 lb = {}; b.x = 1; b.y = 0% |7 d; _( L$ E* m+ [1 a" A  J

1 m# z6 `  [  d! }9 e; xc = a) b6 U  z3 G3 c; }

; x+ m8 K/ Z. }- Ra==c but a~=b
1 A6 E# H/ ?7 L
逻辑运算符and    or     not& H' G! l* J; W/ t  `

" i: ~, z- T$ ?1 J+ h0 O5 b逻辑运算符认为false和nil是假(false),其他为真,0也是true.
" b$ |$ N. b% C2 ?) ~# O, u2 c6 i" T* p
and和or的运算结果不是true和false,而是和它的两个操作数相关。
6 @/ c5 l! c7 s4 B7 |& b6 O, O' C% i8 Q+ i0 A0 A( O% y5 I' w8 w
a and b       -- 如果a为false,则返回a,否则返回b
5 z3 ^+ D& W$ u3 @$ x1 r
' b# \& x; H( v4 W- P1 Ra or  b        -- 如果a为true,则返回a,否则返回b* \7 L+ L& ~9 Y
例如:: q/ `- g2 E, ~& Y6 {/ R1 V3 L

* @& o' _! ~) v# ^+ [print(4 and 5)           --> 5
% z& k9 _( `/ a, ~' k7 u, L0 U' @: v& f3 P. I6 ^* ?% o
print(nil and 13)        --> nil% W  w7 x! d! o6 I

# o; @2 k4 i  x6 _: xprint(false and 13)      --> false
3 O& X5 E1 z/ ?7 ]" Z
4 S" N( Q9 A- o& Iprint(4 or 5)            --> 4
& c" v( O' |0 K5 G
' c2 d+ p1 s7 F, yprint(false or 5)        --> 5
9 O: f: z" J& e8 s3 }" @0 |3 l
连接运算符..         --两个点
' R5 J) I6 c1 `
" E2 v% s' y: I6 q# q) ]7 S# ~4 P字符串连接,如果操作数为数字,Lua将数字转成字符串。0 z  c, i( y: x$ ]9 n! Z8 p
print("Hello " .. "World")      --> Hello World
& }$ e! b( Z1 G( s4 }% ^
) D7 P- k- Q% |* Z0 W9 w& Jprint(0 .. 1)                   --> 01
: K" D; L5 J6 [" M" F$ @  y
优先级从高到低的顺序:: C+ D% j* y+ l. f3 R* _+ k. t
^
! X! e5 r2 C( p) znot    - (unary)3 S3 q) I, s) z
*      /* d0 M- I$ J' M) f  k
+      -
2 _( q) n" ^, N; b( Q& g# l7 b..
* ]+ ?, U0 l$ H4 s<      >      <=     >=     ~=     ==8 j; \- K9 e1 ?7 g" h# e4 _
and
0 `& X: d' X- _7 `& Mor
1 ]$ ]# a1 c0 l" X
表的构造构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:
. L3 h! W  L: S# ~$ n" l
) @7 H1 }0 |0 q# }; t2 Ddays = {"Sunday", "Monday", "Tuesday", "Wednesday",+ d) D' D; u! L4 @5 f5 I
; q' N' s, w+ r
        "Thursday", "Friday", "Saturday"}4 J1 L7 ?$ }$ |) x; r/ }
$ @2 I1 U+ [6 i4 s' P4 c
print(days[4])       --> Wednesday0 n& H- r+ M# \7 M- `# \

' T" {' L/ L6 G6 M6 C
赋值语句赋值是改变一个变量的值和改变表域的最基本的方法。a = "hello" .. "world"$ \& m% N9 b' t1 {

8 H0 `0 Y1 ]6 ?# N% Lt.n = t.n + 1$ d: \- F% I/ f6 T( q
局部变量与代码块使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)。
+ v- R; H# G  `
x = 10! t$ X7 {" B9 U* G, a2 H+ |

, ^4 f' R0 J6 Z0 w+ P# _* jlocal i = 1              -- local to the chunk
! q/ I' \5 m7 d) W+ N4 o( @
# ?( x: }4 N( D6 v. |4 e! j, ?while i<=x do
$ D* w! @2 M! [! l# R& r
* s- d6 q2 ~$ r- c3 E    local x = i*2        -- local to the while body1 _' T, S, M4 w& U7 v+ |

$ J# g6 z! W2 f8 O/ C  s) o    print(x)             --> 2, 4, 6, 8, ...
* T& V# u3 _3 H& w5 P8 _" |9 L( O- Q8 u& n5 `' P' \# R+ j
    i = i + 1
& D- H' B5 m' Q( j7 b9 ?- L+ ^$ [, u/ E9 S
end
- L# |+ ]  M  w7 J; A0 z; Y% ?
控制结构语句(if语句)控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,其他值为真。
" G+ h( G# I9 R2 s, |
if conditions then
- {6 S7 D8 I0 C* r  r
2 _/ H' J4 {2 l& z8 {    then-part
+ m: ]$ H/ ?; Q9 a/ g3 X) k+ `( [: E* `6 V, y
end;, k7 p* ]- [: V$ t: ]- H2 A
8 \( ]9 ?) Z* {/ {- _
if conditions then- W- o+ Q5 X& D8 j! \1 S0 ~% l0 u1 X
, |( _7 I+ I$ _/ T2 i4 k5 T. ^8 w" }
    then-part- t* `1 `) A, j% ?0 N# k
, d4 z6 A/ c3 \$ l! V- u' p: k/ r
else8 C5 s% I8 V+ b+ w3 x* z4 X6 ~
5 x; J$ q0 C2 `
    else-part
$ h9 s3 ?, r6 S4 o0 @
8 q4 m/ s8 f& B% W* t4 Rend;% W6 Q& h6 b6 d( e" ?7 C
break和return语句break语句用来退出当前循环(for、repeat、while)。在循环外部不可以使用。
2 M1 {0 y" B* R0 [0 `& o. V
5 P( ~' j3 e( }: u' [0 }  Zreturn用来从函数返回结果,当一个函数自然结束时,结尾会有一个默认的return。" [1 U% O: \- a; J. L
( Y2 B' U: V( ?) [% V$ @! S" o
Lua语法要求break和return只能出现在block的结尾一句。
例如:* I. o" E: e6 ^. q* c" k( V
/ q& D3 r6 l: U; g) |
local i = 1
9 h0 P6 \* W. o2 q4 b& p0 m7 o, ^* J/ v
while a do
9 s/ t" \7 D2 N. X9 t1 k4 v2 D/ M  r
    if a == v then break end
. i6 P( y: N4 H# e/ Z4 p% z  S) n+ B. E: ^8 q
    i = i + 16 v! g: |/ c' K) }5 R
4 c& t/ A# [) o9 g9 M
end
# W" f) T4 ?# D) k& Z* n
函数定义函数有两种用途:1.完成指定的任务,这种情况下函数作为调用语句使用;2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。
$ I8 l: R# K! C, m2 x7 }5 c
语法:
6 g- Z  J6 c: |) V2 u7 r
% I! T. Y6 z& l5 V1 zfunction func_name (arguments-list)3 N! z& G' m4 {  C# t

/ D1 g& q5 [; c* d4 s    statements-list;
& @7 k& G$ L  y  r3 f* d
5 H( c/ H; l; Lend;  ?' ~! ~/ t3 U8 N; u) f6 X

: l( i* h* c1 x( ?% ^- }; b
函数调用调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。print(8*9, 9/8)
- ^7 G+ J' c& _/ {+ T4 p" x1 j6 a  _- h- y- i" A
a = math.sin(3) + math.cos(10)& R" K1 y+ Y! I, f/ {1 B
5 }: ], p7 U  a  I) ~
print(os.date())
- ~8 P# a: h+ W7 v7 [& Q% t. v1 ~
免责
帖子地址打造全网最多免费游戏网站
今日来客 列表模式
本月有问题处理时间8:00-12:00上夜班  9.7发布
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-16 13:49

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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