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

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

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

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

等级头衔

ID : 1

管理员

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

发表于 2026-6-10 16:11:59 | 显示全部楼层 |阅读模式 IP:广东东莞
免责
Lua基础语法(详情可查看Lua程序设计.chm)
, B3 X! S' W. f6 d! V# s

$ B$ l: }$ J8 P8 _
0 F  ]6 C/ m  u

8 ?% M1 {1 `8 g4 c
$ C3 p$ ^3 b' h/ y7 |1 o
保留字(每个都有单独含义)and        break      do         else       elseif+ |0 y, o7 O# r
end        false      for        function   if) i/ a! g2 C7 b6 F" U! y* P- c
in         local      nil        not        or; V. j! q# F& B
repeat     return     then       true       until
6 U& L5 y, T/ `* \while

5 ]5 d# ~  G: y! T
注释(注释后代码不会执行)单行注释:--
4 h  w# U& d) s( I8 i
. k. C: i0 k- Y( j& ]/ ]2 p* K& q多行注释:--[[    --]]
) N; p1 f+ X( K& T/ K) u
( {3 {/ {* T7 M7 X' g
如下:
" H& x- N2 U1 @# R0 J8 e--[[
" y$ }* Y; A& T! B4 \. V, Q6 r9 V' e5 Y! c- g& o, M6 w5 x
print(10)         -- no action (comment)
* I$ N# W( R' d' \. C% Q: x
; R. m* T# a4 T! w: ], O3 w--]]8 [' n* ]. e' X5 N& K1 b; W+ @
Nil(空值)Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量负nil可以删除该变量。: m1 l2 n2 M, W
" A2 j, y# u# D1 V( P* t

4 [7 O" Y3 \. H3 f9 v
Booleans(布尔值)两个取值false和true。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。( I6 ?. u8 i% P6 z! o/ C

; {( Q6 n+ M8 H! A, F
Numbers(数值)表示实数,Lua中没有整数。一般有个错误的看法CPU运算浮点数比整数慢。事实不是如此,用实数代替整数不会有什么误差(除非数字大于100,000,000,000,000)。Lua的numbers可以处理任何长整数不用担心误差。你也可以在编译Lua的时候使用长整型或者单精度浮点型代替numbers,在一些平台硬件不支持浮点数的情况下这个特性是非常有用的,具体的情况请参考Lua发布版所附的详细说明。和其他语言类似,数字常量的小数部分和指数部分都是可选的,数字常量的例子:
" g$ J0 p2 q* I; _! i  J
2 Y3 @, M# }& X: T& f4      0.4    4.57e-3       0.3e12     5e+20
4 |; _9 V; f: E# A
Strings(字符串)指字符的序列。lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。这意味着你可以存储任意的二进制数据在一个字符串里。Lua中字符串是不可以修改的,你可以创建一个新的变量存放你要的字符串如下:- @3 W" ~% }9 T- F& S6 ]( _
/ l- ?) Q( W" j$ @- _9 F" p7 N# Q
a = "one string"
7 m0 K' N8 f/ S+ [
7 P; w  H* C. X  mprint(a)          --> one string
5 d/ ]* o2 _0 s: v. c2 g
Functions(函数)函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数的参数,也可以作为函数的返回值。如下:7 ^0 Q% U' i! l& E- t

) ]# x! H& k5 m8 jfunction 函数名(human)
9 a. Q/ J% n% s    return 1      --返回一个数值:1
, M8 ?" A5 ]; bend3 g0 c, \, ^, i9 C* x
算术运算符二元运算符:+ - * / ^  (加减乘除幂)
. }' n) `7 G; P9 E- S* `& `- p
: {, O) r4 `0 s. l, T一元运算符:-  (负值)
5 z3 [% G3 g: L6 _
7 G1 j. t; X( G7 p# m这些运算符的操作数都是实数。
* T: A0 {$ g: s4 i: \) y, Q; g2 Q

; t5 B0 K1 I+ V8 ~5 `1 Q
关系运算符<      >      <=     >=     ==     ~=
! M! D; n& p9 ]1 f+ H: U
( S+ V( }- p4 g; x4 \5 k; n5 _这些操作符返回结果为false或者true;==和~=比较两个值,如果两个值类型不同,Lua认为两者不同;nil只和自己相等。Lua通过引用比较tables、userdata、functions。也就是说当且仅当两者表示同一个对象时相等。
& s, {+ l' H. U) h/ L6 Q! Z8 A
a = {}; a.x = 1; a.y = 0
: c( q) L* f, @
% u  \0 Q5 _: c' H$ r1 \b = {}; b.x = 1; b.y = 0
: |  M; u7 r6 q: Y+ W: A) R
# [3 d" V; Q: e" Fc = a
* j3 ^+ u2 J6 i+ u" }5 C' k: o0 B( B0 S7 B
a==c but a~=b: m1 D, P4 [. E
逻辑运算符and    or     not; @# j( x$ r9 G# C: G! }! g
" z* \+ L+ j7 l
逻辑运算符认为false和nil是假(false),其他为真,0也是true.
8 ~3 w% v3 t* q$ c" n3 }8 b  }8 J7 q; z* w; \
and和or的运算结果不是true和false,而是和它的两个操作数相关。
$ c* K4 k5 h' \3 Q4 p
/ X* {% K3 _8 X6 f. m: U# P' Pa and b       -- 如果a为false,则返回a,否则返回b
* c# F8 ], `- r
; w, D: P6 S- ea or  b        -- 如果a为true,则返回a,否则返回b
7 Q8 y8 \9 W: ]6 z% s" F
例如:6 u( H; L. F5 f  _

/ S6 l  B0 P& p) C! O( }print(4 and 5)           --> 5
/ O, ?- |6 ]0 r! N' O! w7 o9 x3 h4 g' J" K
print(nil and 13)        --> nil& w5 i5 C9 X0 {1 Q0 j5 g! ~9 y/ I( l
7 L+ R8 j/ }  I, y4 b& j
print(false and 13)      --> false
7 ?+ D! b0 J/ d8 X8 L; I: `5 [5 F7 L" s4 ^2 G6 e
print(4 or 5)            --> 41 i7 G% W$ L% J: N7 Q' @
2 T* i, m$ h8 p
print(false or 5)        --> 5
0 W0 U) ?4 M4 @) j4 F: m4 t4 r
连接运算符..         --两个点
* U8 i$ W- Y7 a( X( r8 s. I0 P7 s& `5 @) F$ P
字符串连接,如果操作数为数字,Lua将数字转成字符串。6 W! g8 _, Q) H) Y$ {% ^5 \% m2 `
print("Hello " .. "World")      --> Hello World
- D) K$ @. M- b% ]% ?* {5 C5 o9 d  H5 i' @8 ~6 e
print(0 .. 1)                   --> 01
! k$ \% c1 {: e& h
优先级从高到低的顺序:
7 Q& P  c8 g! P2 Z^
8 M9 ^9 s/ R6 ^not    - (unary)- t8 h2 z, q/ j2 g8 x
*      /
; M, O- Z! j) O9 \6 P4 L* D+      -2 d/ I8 d) _, @/ b0 A
..: d6 g/ {) t; o0 f
<      >      <=     >=     ~=     ==
% y+ K5 h1 s: Y5 G. a' Z  xand
/ T$ t! W& u$ r/ o  N8 t, Jor
( O0 H% J" E2 P8 x. v
表的构造构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:
4 e! X2 a* {4 e- X
2 y2 z* Q1 z, Z9 v/ K$ i! Mdays = {"Sunday", "Monday", "Tuesday", "Wednesday",% ]! d/ Y  j$ ]9 M3 t
# Z6 k: W# R/ S! U4 \& u& p: r
        "Thursday", "Friday", "Saturday"}
* S4 ?, X  M2 A! A. l9 n  Y, H7 J8 z  W; ^" J: m( j) R1 g6 ]  w& J
print(days[4])       --> Wednesday
1 A' i+ A9 ?3 k5 f# D& `
$ H0 R- x" ~+ s% B: R. G. w- s
赋值语句赋值是改变一个变量的值和改变表域的最基本的方法。a = "hello" .. "world"2 W/ ~- \: p! A1 o7 I& l
+ G3 ?2 I5 j$ G  F
t.n = t.n + 1
$ d4 {0 c2 A6 J8 O$ J
局部变量与代码块使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)。0 {! Y; {- _( M$ e0 z; D
x = 10
3 S0 w! a- V3 m5 x; }
. R- p  n. Y* Q! T+ r, Ulocal i = 1              -- local to the chunk! ]2 }# i; d5 a3 \/ k& m4 d
0 p( \+ Z; \5 J; N- u. D5 h
while i<=x do
+ j" u; I+ i8 K) r$ s* h) G1 f( v, F. ]  Z! n6 x
    local x = i*2        -- local to the while body, ?5 C  s7 l9 m3 n0 ~, I

- P8 J& ?- D( G. N    print(x)             --> 2, 4, 6, 8, ...* k. M5 Z! [$ V0 q
- r' g: w1 e' q, Y% ~4 z
    i = i + 1
0 j0 Z9 [3 h, L+ b# Y+ V+ Z7 I7 Y2 z6 R0 E! Z  y1 O
end2 `. e" [9 R3 C) X2 N: s6 z
控制结构语句(if语句)控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,其他值为真。
% v8 _9 o2 R, X4 ?: \) ^# @% I
if conditions then/ D/ d  q7 j" A) M' ?) Q9 D- b* r3 B* Y

/ X* s6 `- i8 T4 s4 D' X0 ]) L    then-part
+ j, u* N6 o9 Y# o" N5 g
& P. E, o+ \+ k1 fend;9 R! _, ]: G  c; J8 f
; I1 ?' }: \# Z" I: Q8 ~
if conditions then; F% o6 F) I: o
* I$ P9 u  L7 r
    then-part
% x* o: n  _0 s, y) Z3 K: D0 t# f! S8 S1 T
else9 v2 ^. Y+ b/ W2 m
" P) a- ^' k5 t% U! Q7 k
    else-part0 V6 n. d1 ~6 t/ z" K/ J, B3 Q

: W3 D  n& L* c! eend;
; n2 I! E5 w- f( J7 K0 o. T0 s' |
break和return语句break语句用来退出当前循环(for、repeat、while)。在循环外部不可以使用。
9 t# V9 Q# s) |% |% N6 G* b9 |' l
2 [& e2 c# O$ `& v/ Ureturn用来从函数返回结果,当一个函数自然结束时,结尾会有一个默认的return。0 m1 U6 f% X1 F/ F; _5 z

& W4 T+ U! z+ N" VLua语法要求break和return只能出现在block的结尾一句。
例如:
5 U, e" G' Z: g2 c. u3 p+ f1 A" R' b) @0 Z* t4 A- ?+ `
local i = 1- H0 `8 ?6 U4 |4 V

: X; b  ]" }' @# z$ H0 O: twhile a do( w; }' K; T3 W9 e( M; e5 Y

8 R$ ~3 |. V8 O: }2 L    if a == v then break end. \3 w- w+ R3 e: C$ q9 \' Q9 W9 m
& F, ~: I, ]+ M+ E
    i = i + 1
/ S- j' C, N( _. x% C4 ^; ]- c0 g/ x$ z6 P
end% n; x- D% P$ D
函数定义函数有两种用途:1.完成指定的任务,这种情况下函数作为调用语句使用;2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。
  b. T6 H% t5 y; \4 d2 s" J
语法:5 H5 q( G; K1 r% M
- k4 @: X- x0 m: f2 O- G
function func_name (arguments-list)3 [6 ?$ u: b! h6 @* G. o

1 Q% R9 @' c  g    statements-list;
1 q4 [" \4 P  Y+ n* a1 h8 y% g; S9 u* m7 j+ U: }  U' B
end;
9 s8 p  f6 X) I# Z, G
8 _0 w( v" v. y6 y- p3 r
函数调用调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。print(8*9, 9/8); r5 v# g6 p4 U0 n" C9 `2 S& S- ^2 O
0 \* Z! G5 S9 y' E9 _/ U
a = math.sin(3) + math.cos(10); H- @# x! h: i1 y

, _4 R  z2 P, _% Mprint(os.date())
2 X4 r" V7 b* U9 o* u
免责
帖子地址打造全网最多免费游戏网站
今日来客 列表模式
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-26 06:05

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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