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

 找回密码
 立即注册
搜索
查看: 5431|回复: 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)' T4 B" ~& m8 E' j' |4 f' o, `

5 y9 Z; ^' q2 c4 w2 O8 X
2 Z2 S1 |/ D8 L# B# a4 _
% ]! R4 j9 [: e
$ g+ E9 k, `/ b/ o: l" s6 l% v$ e
保留字(每个都有单独含义)and        break      do         else       elseif
. ]& d1 M. u- Q* ?+ Eend        false      for        function   if6 A1 h% b2 F+ Z
in         local      nil        not        or
" ^; @# }; _  ^' Yrepeat     return     then       true       until
- Q; {5 ]/ t% ]while

% z( Y) t& h7 i2 U
注释(注释后代码不会执行)单行注释:--0 y' h8 b& Q1 J5 ?) }/ t! l2 f

, t! ?6 |/ ?+ C' F3 a多行注释:--[[    --]]
2 @1 y+ N- Y- u3 C. G3 H6 e' `# g8 O
如下:5 G8 N$ \+ z& ]4 i/ c( t, s* Y( O
--[[. F0 r( R, K* }2 w$ L$ U

" V, o4 B- W' u' D$ [print(10)         -- no action (comment)" X( A( Y4 d1 Y$ }
/ _# j# \' M( k0 [$ N9 r9 X2 \
--]]6 N% R3 S+ U% P9 Q7 S
Nil(空值)Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量负nil可以删除该变量。
" T) b- d! y# B" O1 Z8 L& \* h0 k
& U: a3 f* [/ g4 g3 z2 g" k9 D
' {1 C+ H& }; o7 [) \
Booleans(布尔值)两个取值false和true。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。- {% [2 `$ a& _, C7 a
+ A/ j4 u3 i1 `+ e2 L
Numbers(数值)表示实数,Lua中没有整数。一般有个错误的看法CPU运算浮点数比整数慢。事实不是如此,用实数代替整数不会有什么误差(除非数字大于100,000,000,000,000)。Lua的numbers可以处理任何长整数不用担心误差。你也可以在编译Lua的时候使用长整型或者单精度浮点型代替numbers,在一些平台硬件不支持浮点数的情况下这个特性是非常有用的,具体的情况请参考Lua发布版所附的详细说明。和其他语言类似,数字常量的小数部分和指数部分都是可选的,数字常量的例子:
' F6 |& J6 ?3 c( l# F3 P8 |+ f2 K" `. H5 Q
4      0.4    4.57e-3       0.3e12     5e+20# T3 k2 ~1 Z3 W9 M8 j
Strings(字符串)指字符的序列。lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。这意味着你可以存储任意的二进制数据在一个字符串里。Lua中字符串是不可以修改的,你可以创建一个新的变量存放你要的字符串如下:
6 }: @( g) M3 n( k! D9 L/ y. H2 M$ J6 z( h
a = "one string"
$ N3 G$ Y6 F: v. k& A7 Q6 G: u; t  w3 |' [. ^
print(a)          --> one string
" I$ [' Q7 b, w" i9 m; F: J( ~
Functions(函数)函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数的参数,也可以作为函数的返回值。如下:
$ R# U: k. }/ ]
4 G, _) |) r8 |4 x2 z  ]function 函数名(human)
+ ?6 {/ h% D' h) I    return 1      --返回一个数值:1
! C: G; b# ]' C4 l! J0 s# gend
/ ^/ f; ~4 w% B% H
算术运算符二元运算符:+ - * / ^  (加减乘除幂)7 G! N: U& Z/ w8 J  @
- r$ ~2 [; O* C1 ?* M0 r
一元运算符:-  (负值)3 b: E0 P% x7 b0 C- M2 C7 F

7 k6 n# d- T( |8 ^  q4 ]这些运算符的操作数都是实数。
6 M4 C  m8 c7 v) G6 s7 t

3 o' d5 o' x# Q4 G5 I6 Q
关系运算符<      >      <=     >=     ==     ~=
. B! V. z/ i2 V  n* O. e  d
+ B+ i6 E9 O' b5 \7 G" e* B, z这些操作符返回结果为false或者true;==和~=比较两个值,如果两个值类型不同,Lua认为两者不同;nil只和自己相等。Lua通过引用比较tables、userdata、functions。也就是说当且仅当两者表示同一个对象时相等。3 u  [8 R0 u( ], d* K4 H  t  f
a = {}; a.x = 1; a.y = 07 t& ?# l3 \( a$ \. w3 T

% y: V, ~2 l8 T6 w( E, a' gb = {}; b.x = 1; b.y = 0
3 W5 K# s9 n3 }/ I# u& L; h" k
0 P! {" O' @$ }' N! A* }& fc = a
' W8 ?9 e. O& w; D* u( ?
" ^6 ?2 W# l  l& `" Y* P. ?; d" la==c but a~=b3 Y$ f/ `* \5 D3 A
逻辑运算符and    or     not
% @. E* w  X5 n; A, ]8 }8 @# b$ M
逻辑运算符认为false和nil是假(false),其他为真,0也是true.: |0 f' U! A) K0 O9 G! L0 a

- S4 h, j3 ~  B! @8 hand和or的运算结果不是true和false,而是和它的两个操作数相关。
2 e, U! E: }/ ^0 l+ \1 D# o. e' N  ^$ K) v
a and b       -- 如果a为false,则返回a,否则返回b
. |4 X& q: Z' ?6 j
4 f0 y- H2 ~6 D! t5 l$ Ma or  b        -- 如果a为true,则返回a,否则返回b7 Y5 V8 T9 }+ _* N
例如:' Z9 M4 U- o, h% X! e* H- P# [
- ~% u* Z$ I; c& @* N" n
print(4 and 5)           --> 5
4 F' ~* W' a1 C9 a: i- ~# N  u% x8 I2 `5 L, u4 G1 d2 k
print(nil and 13)        --> nil
, p* V, A: M6 {7 a* Z# [; D( ^, K& F6 y6 X, i( }2 a
print(false and 13)      --> false
* |' ~+ \. }, W! w' ^1 s  m& s$ X1 P3 H
print(4 or 5)            --> 4
. \7 [% l7 @  h9 x" ^% J3 X% @9 I' L0 e7 M: C& u, y3 `
print(false or 5)        --> 5
% B# @1 Q' {0 m4 i# n% A9 U
连接运算符..         --两个点0 G; z% S4 h# `6 \+ Y
4 Z4 i+ M/ t. f  `9 ~% ?
字符串连接,如果操作数为数字,Lua将数字转成字符串。2 q  v& J$ O4 G  [4 l, D, ^
print("Hello " .. "World")      --> Hello World
: o) ^3 B2 p) O4 N( |
$ y) j! Y6 `) k2 a: w2 Tprint(0 .. 1)                   --> 018 \' ?# c% d1 u
优先级从高到低的顺序:
* w- `$ P  R: G6 Z^
2 _: v4 b5 c4 S! U" v- K& r5 mnot    - (unary), T7 H9 x& f5 v1 M% o& c
*      /
9 O: C  b! \  Q0 }+      -- s7 }' |% P5 L& _* t/ p: A5 }& ~
..5 |4 h6 u: H, r) k: {
<      >      <=     >=     ~=     ==
( \  P3 c  X5 @8 w  Aand- T$ H0 [" z# K  u6 L# @
or

; y; y* B. \- |7 ]4 O& L% T
表的构造构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:
4 K8 [3 M5 x, X/ D5 w( x9 D6 a5 M" N! X
days = {"Sunday", "Monday", "Tuesday", "Wednesday",
1 L2 G# a7 Q5 u( B" a3 ^( |. t! i4 W1 {; b+ V
        "Thursday", "Friday", "Saturday"}
+ w- k9 n; H$ z) ~& E
7 [! p! z3 I, K3 Rprint(days[4])       --> Wednesday
. r6 ?  x! ]3 p7 T4 e! S
/ n3 j: V3 `! g% G1 k' [# O( ]
赋值语句赋值是改变一个变量的值和改变表域的最基本的方法。a = "hello" .. "world"
$ r) \5 S' b8 X8 M9 i  Z1 M6 h: z) H' L& }1 i2 h* q9 A* b  {* d# P6 D
t.n = t.n + 1
' M( T  q5 ?' z3 [8 m. S
局部变量与代码块使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)。! K3 \, {8 ]' x* D5 f: _- I
x = 10, q2 o4 Q+ r$ W4 |3 W
1 v. S5 w& t# u! ?6 B0 n
local i = 1              -- local to the chunk% ~% n7 T, H2 y- r$ _, |. c

; n/ {( H- f6 cwhile i<=x do3 k4 X/ U; j% V( G
& }. O7 W1 G; g, l. m* ?2 `/ T
    local x = i*2        -- local to the while body
' C6 [; V+ f* \2 w; s" W- c; T) A& ?. h
    print(x)             --> 2, 4, 6, 8, ...
+ b) f; ]8 w. b2 X7 W5 n0 D+ f. {4 s. D/ h
    i = i + 1
8 f& t. _. I2 b% V' Y% Y# o& }; J( y- u/ }
end/ r, r. g7 |# S& C! }# ~9 w7 F9 d
控制结构语句(if语句)控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,其他值为真。8 ~, ^5 B; q9 \. l* G
if conditions then
: e* H% t$ _' o; E/ D( K
6 m: s2 B0 v1 T    then-part: G$ e4 l) J( h% D( \
7 Y- G+ F1 @% @2 E2 D
end;# J2 w( E6 E" t: _& c+ M
0 u; w$ z; h3 s  G  f" `5 k
if conditions then
6 C' c9 G1 K0 U" F+ t2 w& y5 {' I% i$ f
    then-part; |  x4 e$ z" Q# B* P

8 x/ Y4 m0 x/ _2 K: relse
, A8 M/ J8 f! M% ^1 N
" j4 T- a) X$ ^* [. ~    else-part
& O# v  d  j5 ~! ^- ]
6 k/ h: M9 ?" D% Q9 z* F1 ]( ]. wend;  {  h. s# o1 {4 S  O
break和return语句break语句用来退出当前循环(for、repeat、while)。在循环外部不可以使用。' o2 C0 T+ X8 I9 ?( C

0 K5 q* r3 }1 X$ U) h( Yreturn用来从函数返回结果,当一个函数自然结束时,结尾会有一个默认的return。
* s0 y6 p- c6 J
- e5 {0 [& z9 \0 ALua语法要求break和return只能出现在block的结尾一句。
例如:' X* E/ ?8 Q; d5 _

' V  U/ N7 j) g( j. Z! jlocal i = 1
4 F" v/ f% c( T9 |; f$ n7 G5 t
# y+ ]  p6 \1 y$ ?' xwhile a do! L( H4 [& I1 E; f' }4 ^; W) G9 @3 n

8 o' A3 r; E6 R    if a == v then break end! f4 l9 v7 C, }- s3 h

+ v0 x4 @1 K9 X! r) D) P    i = i + 1
5 y  B& J2 X1 h) R6 F0 T9 S& a6 V$ W1 @" u
end/ w- Q1 z' ^! h2 s( ?" H
函数定义函数有两种用途:1.完成指定的任务,这种情况下函数作为调用语句使用;2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。
1 L( r# s9 h; W
语法:/ f7 i7 A  I0 @! `' D
3 b- ~6 R4 X3 r
function func_name (arguments-list): j1 v( j- Z3 y, P4 d+ X
) P7 H4 L8 G: M3 T
    statements-list;4 k# W- Y3 n- P! A

& m5 a  k% R4 M5 s" C: Oend;
! ]- M4 z9 v/ F
% w7 a$ _5 e1 S, ^) t) P
函数调用调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。print(8*9, 9/8)5 x& @3 P& k6 f6 ]

; r* s% K9 X: H/ q1 ba = math.sin(3) + math.cos(10). l% R7 _) W  @0 y+ G- j, i
' K+ \! ~% ^& ^7 I2 a
print(os.date())

( y& j. k! S, F5 @+ v
免责
帖子地址打造全网最多免费游戏网站
今日来客 列表模式
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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