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

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

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

[复制链接]
灌水成绩
18541
100
19068
主题
帖子
积分

等级头衔

ID : 1

管理员

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

发表于 2026-6-10 16:11:59 | 显示全部楼层 |阅读模式 IP:广东东莞
免责
Lua基础语法(详情可查看Lua程序设计.chm)2 W3 \# B# p6 B  \. q  o6 G, q1 u

$ S" y% ^- Q" ?- ?% x
' Z- O$ P9 ~) t9 {7 _  R) [  N

- h* b" G! O% J3 A

- m0 H5 ?9 a: P4 Z7 N1 ~* |& E* ?
保留字(每个都有单独含义)and        break      do         else       elseif
( N3 S. y& q9 ?9 X  Send        false      for        function   if
2 M: G6 _5 d+ I, H/ U; Win         local      nil        not        or/ y+ i% Q$ r8 H4 _/ c& t1 ?2 p
repeat     return     then       true       until& [" u' s  [- S7 L5 ^
while
5 y$ B1 P, C1 b
注释(注释后代码不会执行)单行注释:--
& G" M8 V, `( b; I/ b
7 ~2 Q: i1 K6 ?- B5 s多行注释:--[[    --]]% ^7 N* i1 E  K+ w" C5 P
! r' M& E* o! C
如下:, }8 R* c) W  y% J# m! Q, y. c
--[[7 {5 Z+ d% T5 {

" d& W% Y* `5 g7 yprint(10)         -- no action (comment)# ~6 W# C- D& m3 s5 b
4 I* v2 q. A4 p4 I" Q
--]]
" h0 |3 u/ x, {& A. Z$ t$ p; W
Nil(空值)Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量负nil可以删除该变量。
8 [% v2 T8 h# W9 L8 a! }7 G+ r+ `5 ]! D6 `5 ?3 Q6 B! H
" S) @: g# p  `8 }
Booleans(布尔值)两个取值false和true。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。7 {; ^  u4 I+ l. d
  }+ U& q8 ~2 F, ]
Numbers(数值)表示实数,Lua中没有整数。一般有个错误的看法CPU运算浮点数比整数慢。事实不是如此,用实数代替整数不会有什么误差(除非数字大于100,000,000,000,000)。Lua的numbers可以处理任何长整数不用担心误差。你也可以在编译Lua的时候使用长整型或者单精度浮点型代替numbers,在一些平台硬件不支持浮点数的情况下这个特性是非常有用的,具体的情况请参考Lua发布版所附的详细说明。和其他语言类似,数字常量的小数部分和指数部分都是可选的,数字常量的例子:! A4 S0 k+ I. a0 r% i
) O, d  |- q- \$ v# t
4      0.4    4.57e-3       0.3e12     5e+20
" @" r5 R- H3 Z& _; k8 l5 W$ m
Strings(字符串)指字符的序列。lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。这意味着你可以存储任意的二进制数据在一个字符串里。Lua中字符串是不可以修改的,你可以创建一个新的变量存放你要的字符串如下:
2 H4 B  I6 ]+ B5 v7 b  w- i; m' ?0 H: ^, m4 I7 O
a = "one string"5 {) N- ^& D, j
( @% z4 s$ E, P0 b4 i' \
print(a)          --> one string
3 j) A7 r) V+ H$ ]* x) o$ w' g0 q& P
Functions(函数)函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数的参数,也可以作为函数的返回值。如下:
1 [: W( k, d5 ?* z: N( ^/ ]
9 o% h9 v/ {/ D; B- ufunction 函数名(human)# J* \% m* i1 z2 @: X: R% {0 m
    return 1      --返回一个数值:1. [2 w# g* j) M3 M
end( }( h4 I- F  l$ m# z1 ~
算术运算符二元运算符:+ - * / ^  (加减乘除幂)
% X, o2 H; v" R- E2 F8 ~$ G8 i# g, `$ Z0 Y
一元运算符:-  (负值)6 h  l% F' s. }+ o8 }8 I

* j7 O. ^, H/ F8 C这些运算符的操作数都是实数。, `/ t& b4 q- P: h7 J( L! W
% ~3 R+ L: f0 f2 ~
关系运算符<      >      <=     >=     ==     ~=
: m2 {, U8 H9 _
& f0 o6 I: u, a% @7 N+ o这些操作符返回结果为false或者true;==和~=比较两个值,如果两个值类型不同,Lua认为两者不同;nil只和自己相等。Lua通过引用比较tables、userdata、functions。也就是说当且仅当两者表示同一个对象时相等。
, x, Y/ t4 c8 K' z
a = {}; a.x = 1; a.y = 0$ v1 [/ V4 z7 [; v
/ x( X, x2 m" o4 \+ o2 N/ d5 j
b = {}; b.x = 1; b.y = 0
  q7 D& Z, Y0 g- d- {& P- x
: X" u3 h+ S4 t: E9 Oc = a" n1 d/ D" N; q7 C( O7 I5 V( n
9 ~: `$ X( m; p' m. B) ]
a==c but a~=b
( j  y4 M. P! b/ S- f5 L
逻辑运算符and    or     not: _- n' r5 [) N
; c1 t. Q$ H* T0 ^& J/ c
逻辑运算符认为false和nil是假(false),其他为真,0也是true." e5 J. E& W+ `) Y, t! [
9 I- t: R( C7 n# ^
and和or的运算结果不是true和false,而是和它的两个操作数相关。9 l+ \: @8 S  y- Q* d& m
  H; D/ i. D- W
a and b       -- 如果a为false,则返回a,否则返回b6 s# T3 @6 ^& M; E  k) o
0 i+ t5 ^. a3 n6 a, F
a or  b        -- 如果a为true,则返回a,否则返回b
& P! C, r& B6 n3 y
例如:5 U) L* a7 J( h: u

4 k: l3 E5 H! }print(4 and 5)           --> 5
+ \% L1 s5 R# n* f* l$ V* p8 V. M1 y5 f/ |. l6 N+ Z
print(nil and 13)        --> nil* }  P) B) g/ _

% W3 m8 ?" u8 b& K. H7 w+ H0 Kprint(false and 13)      --> false
7 ]5 [( f# `! a# d4 n' p/ k2 f
print(4 or 5)            --> 4
% U3 y! ^5 C7 J% ^) a8 E
' a  b* u8 A  Y  ~# c/ R$ Nprint(false or 5)        --> 5
' H. k' W2 x( p3 u$ W5 I: C
连接运算符..         --两个点
7 w* h+ z% P9 d
/ A+ a$ u& `& p" p3 F字符串连接,如果操作数为数字,Lua将数字转成字符串。& c5 q; S0 ]+ P, \1 h7 l/ @
print("Hello " .. "World")      --> Hello World
+ I5 z" Y0 S- C! D' D! c7 E$ Q1 D3 f6 M' A1 l: k8 T* I" K
print(0 .. 1)                   --> 01
. o  V$ y# _, t2 v, M
优先级从高到低的顺序:
9 {+ N9 V% q: [/ @5 w8 i/ U7 q^
& {1 s) Q0 Y4 {- Q# B) Pnot    - (unary), y6 z; s3 o. K' S
*      /. B% |0 l! h+ c
+      -* [( m) V1 `) ~& p' i7 o
..; F; u; Z& l% j* f. G' A  {" X9 D
<      >      <=     >=     ~=     ==9 ]3 E" t% L4 t
and5 i, [: O7 t' S9 Y
or
0 ?5 q3 `1 P9 T
表的构造构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:
, k8 R3 F& ^7 u7 W6 ?2 ^" H7 A* O' m+ a0 Y6 g. I8 ~
days = {"Sunday", "Monday", "Tuesday", "Wednesday",' a6 W; \8 b- m
& d: Y6 u" j% b9 ^$ H2 M2 Y
        "Thursday", "Friday", "Saturday"}5 }' q4 z- a6 `8 p

+ o- X1 S3 O5 J3 E! O2 b! [* Dprint(days[4])       --> Wednesday" A* J* t+ s% v9 H$ S# L
, O7 o+ s6 s4 d/ W
赋值语句赋值是改变一个变量的值和改变表域的最基本的方法。a = "hello" .. "world"
: ?. v  k$ @5 h$ O4 S& J8 A' G
  [! V# q6 R) G/ F% |" Bt.n = t.n + 1
. q3 \4 S8 B4 B2 p' ^% q
局部变量与代码块使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)。
5 j0 S8 [+ m8 o: r. n/ t
x = 10
) X, Q: v4 E. E1 q6 {' s( U. T' K0 G- E$ Y  p: H5 o
local i = 1              -- local to the chunk
' d& {0 n# V; b( t" V3 h+ u: F: t5 g* T
while i<=x do
$ b6 F3 I9 i, ], z# Q8 j4 B
7 ~& o' b* P# @$ z0 z$ C4 G- s    local x = i*2        -- local to the while body+ Z8 A1 V& N0 d9 T* ?
$ P1 N$ f9 |# d8 p" N
    print(x)             --> 2, 4, 6, 8, ...+ w( J! [3 N+ j
' k. U9 S' Q7 @
    i = i + 16 w5 `$ [  T* w  R  s8 f" v
8 c5 ~3 \6 i! f% n, j! `- ?. Z
end
0 r2 G0 V  U$ V
控制结构语句(if语句)控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,其他值为真。7 }! e! U0 U1 r5 [0 x$ o
if conditions then
  x( W; V5 d" j
& z8 E* K4 x" x7 H% H    then-part
4 f6 c1 r/ r7 e$ F
* ]1 ]8 D, K7 B" l; @) k' Yend;
! q$ w2 e# S, f7 j5 L6 P
( Z, k0 `  _1 i! W" K% G' aif conditions then
" V9 ^& y& z% R  P% x+ L1 Z" e9 v* ^! V& V
    then-part
1 o, D9 A$ C  K1 j
2 m6 }! w7 U# F4 f' `% Z- ielse& u7 ?0 ]' y7 t: F  q
  H! I$ N9 m/ Y1 Z! `; z/ U# k
    else-part
4 c* {& T2 [6 z% A2 C: O; P, r. S/ D* A
end;/ d1 _9 }- D/ K6 M
break和return语句break语句用来退出当前循环(for、repeat、while)。在循环外部不可以使用。( U# j3 j7 B8 n! U

/ I; h: ]+ c( E1 z, {9 f- @6 dreturn用来从函数返回结果,当一个函数自然结束时,结尾会有一个默认的return。8 g4 l+ U( o/ l( m7 h+ J' X

( W: I* n* B. K" n/ JLua语法要求break和return只能出现在block的结尾一句。
例如:! z+ q1 J/ g+ D$ X; {' o

% W+ P& A: Z5 b& q  d, plocal i = 1
8 ~5 P7 W; v5 _( s) G* v1 x; k" _4 `( t! p
while a do
( R% a$ K; A8 B& P/ }- H5 d
" j$ p0 l# I6 o8 V    if a == v then break end
: c  z6 w; R( N. a
: D9 c) E/ e% {6 e    i = i + 1
7 t0 _' K9 Q, m, o) _
/ {9 a$ f- K9 R' u2 T% G$ n3 Z! vend
0 c+ @; ~8 x/ n6 \6 a9 x3 ~
函数定义函数有两种用途:1.完成指定的任务,这种情况下函数作为调用语句使用;2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。
& }& C! _! w" Q1 r
语法:, n& Y3 e" _- A3 F& J
& R8 U( @( Y. M5 Z/ V7 d
function func_name (arguments-list)
8 }+ K0 @/ v5 q; F: G, j6 j$ O
/ z% T' B) N4 i$ D; h    statements-list;
/ N' v; K9 o9 o5 f( a4 |# L, f+ C3 x- ~7 q0 a
end;
1 u5 Q7 `1 G+ X4 ~) J* W& J, w
8 |0 z. l- x: U& }6 `) [1 K
函数调用调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。print(8*9, 9/8)' J' L" U; o2 C: E2 k2 `

- @7 D# d+ r8 _" a3 e1 ^1 Oa = math.sin(3) + math.cos(10)
6 i8 k# ]& A$ f6 I8 `" {# t: g( f2 t8 u
print(os.date())

  Z  I6 H" m9 z* R8 |& |
免责
帖子地址打造全网最多免费游戏网站
今日来客 列表模式
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-2 12:41

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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