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

 找回密码
 立即注册
搜索
查看: 5622|回复: 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)
& Z- f: V9 j6 p
* L% g0 b8 X9 @. E, A( K" a

. @, J" P5 S" S- o1 c# M" k
( H+ P. S4 u2 ^0 X) @1 ?. ]( m

4 D9 P. ]! H+ w
保留字(每个都有单独含义)and        break      do         else       elseif. `% K$ x( O% }* e
end        false      for        function   if# N' t' P3 O) a1 o: `; c; R
in         local      nil        not        or- |* a- J% h' n! I" i4 f
repeat     return     then       true       until/ Q) K' @0 ]( H+ N; _  c
while
/ j0 ?& b/ [" B/ s' C) l
注释(注释后代码不会执行)单行注释:--
; g' U! ~+ b0 o2 F
: ~9 Y0 k: E* c2 I% U1 ^5 d) Q多行注释:--[[    --]]
1 G, M$ I- Q& T( ~6 I% x  `
1 V' s. j) ?2 A
如下:& ?# q5 _1 \1 c7 s2 P6 @
--[[
5 d$ d& U; D. J4 W4 e9 J( e* M, A$ D1 z
print(10)         -- no action (comment)
; [# p8 w% c' I- ]* g0 h. _# s" }0 ~8 y( S5 U
--]]2 j, p; [) E* t2 L1 [1 c  Z4 P
Nil(空值)Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量负nil可以删除该变量。2 x6 }3 p& x- }' q, M
! |4 @. s# ?+ e
- k! ]/ a" v& Q9 G" }$ Z
Booleans(布尔值)两个取值false和true。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。
( P4 q1 Y9 J8 l! d" {0 E

9 W0 G. T) X' s4 Q. ]& h. ~8 v6 X
Numbers(数值)表示实数,Lua中没有整数。一般有个错误的看法CPU运算浮点数比整数慢。事实不是如此,用实数代替整数不会有什么误差(除非数字大于100,000,000,000,000)。Lua的numbers可以处理任何长整数不用担心误差。你也可以在编译Lua的时候使用长整型或者单精度浮点型代替numbers,在一些平台硬件不支持浮点数的情况下这个特性是非常有用的,具体的情况请参考Lua发布版所附的详细说明。和其他语言类似,数字常量的小数部分和指数部分都是可选的,数字常量的例子:
8 a# |# ?' @! M/ |
8 G7 T' v$ I) v4      0.4    4.57e-3       0.3e12     5e+208 z8 }* }( I/ l7 |6 I
Strings(字符串)指字符的序列。lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。这意味着你可以存储任意的二进制数据在一个字符串里。Lua中字符串是不可以修改的,你可以创建一个新的变量存放你要的字符串如下:$ s, _+ c3 ]: v. r
$ Y) V/ g, H, q* b* R
a = "one string"4 J$ B9 a3 G- m; M
- \5 B3 R# \4 H
print(a)          --> one string
/ _7 e; o* L2 X  r9 O
Functions(函数)函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数的参数,也可以作为函数的返回值。如下:" P% ^; j% }: T/ n0 E5 ^
( }9 M  q4 x9 p  ^8 x! w
function 函数名(human)
% C! j% Q3 y, {    return 1      --返回一个数值:1
7 r0 o4 I. K. P# _: o3 qend% U: \3 [( j4 q6 t4 z* [4 {
算术运算符二元运算符:+ - * / ^  (加减乘除幂)
9 _+ E" Y0 o8 ~6 b4 B) g
7 u6 o" ?! _+ ~( {/ y一元运算符:-  (负值)
7 W+ v/ a" f- M7 p1 R
& F) q  s' I3 }4 w& \2 q; m这些运算符的操作数都是实数。8 X9 B+ q- g1 H8 w& _! L( S( w1 l

: O- h8 A" ?" K/ L1 R/ J
关系运算符<      >      <=     >=     ==     ~=7 _# b: G+ o8 _9 H/ _$ G

) f7 b- e9 K6 P1 I  m/ F& u这些操作符返回结果为false或者true;==和~=比较两个值,如果两个值类型不同,Lua认为两者不同;nil只和自己相等。Lua通过引用比较tables、userdata、functions。也就是说当且仅当两者表示同一个对象时相等。
: Z' h* x0 V; d6 B
a = {}; a.x = 1; a.y = 0& D4 Z& H7 }; K" W2 E3 q

* L& ~6 v- V4 o9 Db = {}; b.x = 1; b.y = 0
$ ~9 {" a& m, i. u0 L  I% w! O
, T7 C9 Z/ P0 a% Mc = a) Q: t+ A5 x% y3 Y

: J* @8 V, e$ U( u8 {a==c but a~=b; w/ [3 i' [, L8 [, D& ?
逻辑运算符and    or     not2 ]  ?+ [" |. j
) \, Z" ~# m" ~( c/ n/ \
逻辑运算符认为false和nil是假(false),其他为真,0也是true.
. v: w: f# D: J4 ^  g
! T& |; @) O/ {, _and和or的运算结果不是true和false,而是和它的两个操作数相关。0 E# b6 w4 ~% C; Q$ r  ~

; L5 v# i3 l* g! h: V  h6 r* ca and b       -- 如果a为false,则返回a,否则返回b+ s# c# z( v7 a& W

% o  T9 l6 O  j% [a or  b        -- 如果a为true,则返回a,否则返回b
8 C/ k; r+ I* |* F1 i* ]6 _' H" i0 L
例如:
# e3 z/ }# I$ H6 n* s& X, I; V) l& b
print(4 and 5)           --> 50 c( h- F& k6 \
( `+ C. x. p+ n* }9 M
print(nil and 13)        --> nil+ I( {  {( a* G5 O
" r/ A- Y6 r; A$ ^+ c; `
print(false and 13)      --> false
+ F# X' ~( U, @
: D" U3 m7 e8 N& Jprint(4 or 5)            --> 4
% E: q- e2 G) {$ [' d# E- q, e4 t/ w+ ^, H# s
print(false or 5)        --> 5
! k0 l& U3 a0 U: R" f8 Z
连接运算符..         --两个点' T( z$ T2 w9 w# i! x( ^* W7 P: O: Y

4 f( D2 H* |9 g  ]! D字符串连接,如果操作数为数字,Lua将数字转成字符串。
/ u7 W2 Q7 _; m# U8 ?& ]8 ^
print("Hello " .. "World")      --> Hello World4 ~* w$ f; z8 r  D
% D5 X+ A2 Y; Y, o0 N2 u/ J
print(0 .. 1)                   --> 01, N6 q% q* u* [# h+ K0 C$ i1 t
优先级从高到低的顺序:
: P/ W; P# y3 M- [5 e* {* b" Y* I^
/ e( e+ V. @2 c/ lnot    - (unary)- l+ H0 K$ J8 G9 |9 u0 K, {
*      /% q# @2 j; Z5 k6 x+ t( X; y6 P
+      -: x( q4 r; b1 U  B
..8 \: Z3 H. A! n6 @
<      >      <=     >=     ~=     ==- d% T+ b2 y) `2 X' Z
and" g. p# N8 f2 L& W) E5 I
or
: b; V9 g! Y+ N
表的构造构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:$ k: h; L8 o) A9 v
  v. z- L6 Q1 o' Q1 j) V5 s' e& d
days = {"Sunday", "Monday", "Tuesday", "Wednesday",2 W9 {+ o# G! P8 Y# K' _
* y" u+ @) U! [2 ^- R# h, F$ F8 K+ K
        "Thursday", "Friday", "Saturday"}
  o: a6 H+ ~2 I( z3 c! B. V2 q6 X! e2 T" q, Q& [
print(days[4])       --> Wednesday
( c' {' u! K8 Z) E3 E/ J1 S8 \( t* O" F2 f7 ~( [
赋值语句赋值是改变一个变量的值和改变表域的最基本的方法。a = "hello" .. "world"8 E+ f5 i" Q  c4 Y4 P2 D0 ^

+ J: l3 M7 G) \& k! q: mt.n = t.n + 1
/ j; U1 V8 W9 o  G
局部变量与代码块使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)。
+ }1 A2 |; S' x6 W0 [0 I0 W
x = 10
) d5 b! Q; [3 I' L1 f0 e0 j! l" [# z' C
local i = 1              -- local to the chunk
% m/ y& ~+ M/ d$ s* ]  k
- T  [' p3 Z$ S$ w, \1 o  Q/ Xwhile i<=x do$ L2 P1 ^# T7 i( J& V
& g5 K5 s$ z6 j2 v; |" z* ~
    local x = i*2        -- local to the while body& c4 B, u2 P& {$ h3 w- X

0 I# v1 e3 x6 j0 o# v6 e7 ]& p    print(x)             --> 2, 4, 6, 8, ...
  W3 X% {+ k% P7 j+ C/ B( E! ~7 a
9 l. J/ O% \8 }    i = i + 1
, P  C" G8 x  H* |
  J' k* k6 k) A: p9 Lend
0 M1 G% E$ u. c0 g
控制结构语句(if语句)控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,其他值为真。5 O: W. ^( ^+ H6 l* Q
if conditions then
6 J) G( b+ Y9 S2 e0 R4 o& l1 R6 v# a% a; \( W4 r. ]1 `
    then-part9 G3 l( u: t4 i& w# M9 ?
7 H( v3 |7 Q- Z
end;
, _/ t+ I% y6 e
6 m4 x, V' |* u9 p2 \3 x. Cif conditions then
) |0 D  \/ S6 a
+ H- }2 a: ?# I4 s" s. I/ J    then-part; K5 P2 O4 O! a  V+ Y! `
% c4 p$ M1 M" ?3 a2 X
else( j$ p; R6 D% ~  ~/ U" s& l5 X
3 g6 g0 I6 d4 n, o
    else-part3 T9 `) f4 A& X% Y3 k- W
/ z2 Z" O, h3 }) j- u
end;
5 j/ W0 b7 Z5 c/ n3 _7 N
break和return语句break语句用来退出当前循环(for、repeat、while)。在循环外部不可以使用。0 y5 V( }6 M5 Y# f+ e8 T, [- }
3 @/ n# C* A6 v' H4 X7 r
return用来从函数返回结果,当一个函数自然结束时,结尾会有一个默认的return。7 l% D, K  I, u" L" {' w) v

& u; o+ b! K' ]* d  \' B% B; \Lua语法要求break和return只能出现在block的结尾一句。
例如:
3 `. R/ K0 y$ {# m2 `+ J, x7 ^* D4 B- f5 |, ^5 y+ d$ S' k4 I
local i = 1
, m3 L2 @. W' [* Z$ s9 P5 m  B
) t4 }1 I% \: R' W! ^1 r3 j* twhile a do
& ~6 Q, H) g% i% D  `% d! V' w# _; Q( Z9 ]; S
    if a == v then break end
$ k( Z, X' E2 k. d6 Q( Y& m7 \. D7 ]& O; w2 O  U
    i = i + 10 h& e+ x- h$ I  K! u0 N, D
) l1 `) m, }. t$ B. q
end5 y+ K- G+ |) g2 W
函数定义函数有两种用途:1.完成指定的任务,这种情况下函数作为调用语句使用;2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。5 F1 N9 z- ?# f1 |4 K) I% x5 j
语法:2 }# T) c& t1 j% h  I
/ x6 t- a9 G) X% H. H1 S
function func_name (arguments-list)
0 T( z* n3 c) C) b2 p$ c# r
2 t  m, W% b' e    statements-list;+ L( b0 o* K; ?  ]& K% z

& w2 M9 Q; _  k+ `end;) F, E" @! w& {4 n& |5 k

' v4 |2 Y9 A8 l8 a
函数调用调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。print(8*9, 9/8)* g, h& o) }) i/ f

  T! g7 ?6 r; c7 ?3 H+ ~  E# _2 p3 C3 Ia = math.sin(3) + math.cos(10)/ S1 i' h6 r5 G
0 y1 h0 R3 F; j
print(os.date())
3 D* F" m2 D% M9 P- n
免责
帖子地址打造全网最多免费游戏网站
今日来客 列表模式
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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