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

 找回密码
 立即注册
搜索
查看: 193

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

[复制链接]
灌水成绩
17837
95
18341
主题
帖子
积分

等级头衔

ID : 1

管理员

积分成就 威望 : 9
贡献 : 9
下载币 : 382
在线时间 : 1654 小时
注册时间 : 2013-9-5
最后登录 : 2026-6-11

发表于 昨天 16:11 | 显示全部楼层 |阅读模式
免责
Lua基础语法(详情可查看Lua程序设计.chm)/ r) `9 f0 i8 I2 N: ?  y
9 i' Z9 l) r$ b

7 P& A6 Y' l$ z! f4 ]7 ]
1 R$ O% z1 l! C. D8 C; H
" Q; Z2 J4 z$ D# e0 ^
保留字(每个都有单独含义)and        break      do         else       elseif! M* R$ N- D9 c* N' w
end        false      for        function   if
) u& J$ L* V( t( ?6 E! Rin         local      nil        not        or
) o$ f$ O2 j8 U3 U- L$ R5 ?0 orepeat     return     then       true       until0 o" o& S6 g8 G" J4 q9 |
while

# d; g8 J# M- J) ]& E6 Z
注释(注释后代码不会执行)单行注释:--
: K, G5 Z& x/ ~& \2 n" l% ~1 b; D! b1 S) o. n' T8 L
多行注释:--[[    --]]
0 Z' z/ j" j* e: e  W$ X& P7 r" V9 W4 ~" p" H
如下:/ t$ S; a; D& g! F8 u+ G
--[[
  _7 Y$ y  L! }4 ?, O. ~6 V! D- X# y  P) y' F2 ~
print(10)         -- no action (comment)
1 e' ]2 u& v7 S% ^: _& C# W: Y7 [: U4 W; M7 y" p& h( E1 V) y: c9 T
--]]
4 p( J; F4 R' y# Q% B! f; w
Nil(空值)Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量负nil可以删除该变量。* |  Y: E  g! T' [6 R  [
% |- B9 w0 w  T1 v

6 ~+ b' t6 [2 W  q3 F
Booleans(布尔值)两个取值false和true。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。: O1 e" T' Q9 H. Y6 P7 t

2 q5 H3 N# v) T8 U
Numbers(数值)表示实数,Lua中没有整数。一般有个错误的看法CPU运算浮点数比整数慢。事实不是如此,用实数代替整数不会有什么误差(除非数字大于100,000,000,000,000)。Lua的numbers可以处理任何长整数不用担心误差。你也可以在编译Lua的时候使用长整型或者单精度浮点型代替numbers,在一些平台硬件不支持浮点数的情况下这个特性是非常有用的,具体的情况请参考Lua发布版所附的详细说明。和其他语言类似,数字常量的小数部分和指数部分都是可选的,数字常量的例子:2 |9 O/ p2 V$ g$ f  K* S1 t  a- v
  i4 h4 Q- |4 |# `% Z8 Q, Y' R
4      0.4    4.57e-3       0.3e12     5e+202 C! P7 ^+ j7 b! l) J3 ^7 m
Strings(字符串)指字符的序列。lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。这意味着你可以存储任意的二进制数据在一个字符串里。Lua中字符串是不可以修改的,你可以创建一个新的变量存放你要的字符串如下:
% x; N, M8 v; k5 r# u6 }; U2 g2 k3 z6 P5 t, O
a = "one string"
2 G4 T2 n# y, j/ M- w- |" }* S0 H' Z- J* y! c
print(a)          --> one string" K: m; k% D" h6 i
Functions(函数)函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数的参数,也可以作为函数的返回值。如下:. A5 _$ p1 r; Q9 t1 q
) W( d* i% v. y$ R
function 函数名(human)
' h- A& Z- P3 J2 p8 C7 L    return 1      --返回一个数值:15 L1 a7 ?2 H* r4 c7 s" j4 @7 n' x
end+ J8 T5 F( g4 |( B. i6 k( h! @
算术运算符二元运算符:+ - * / ^  (加减乘除幂)! f  `$ ]2 [* V: F

7 `. T1 ?; H- H. K- c* F) j一元运算符:-  (负值)! a# X' ?# c% ], [; z
4 r+ J1 V, A" u9 u
这些运算符的操作数都是实数。2 ^8 L+ F7 G' i; E

7 F9 n& z4 \- q0 E! A8 G7 E; e/ R
关系运算符<      >      <=     >=     ==     ~=. i2 l# E. x  z8 @- r
$ V9 O/ v4 }# q; D/ [2 [
这些操作符返回结果为false或者true;==和~=比较两个值,如果两个值类型不同,Lua认为两者不同;nil只和自己相等。Lua通过引用比较tables、userdata、functions。也就是说当且仅当两者表示同一个对象时相等。2 J( l' R: A) s0 B1 H; f& D
a = {}; a.x = 1; a.y = 0( c, Z" O! ^1 N! B
& K: j% [2 Y( Q: R7 q, @
b = {}; b.x = 1; b.y = 0
) a; O3 T* S3 F6 B, ?# f5 O8 G# G
& N' x8 u' B5 S- [) L" ~8 Y0 m" F, Nc = a! N. f2 E& c: e) t# l6 J
& `, E3 \5 _$ }: R. l
a==c but a~=b) ?# g4 R) c* r( C
逻辑运算符and    or     not
: g+ m  [$ Y2 z: W/ K5 {! ]5 @" D# F+ \1 t% x/ e
逻辑运算符认为false和nil是假(false),其他为真,0也是true.
8 V7 N" s% V, Q, D- r0 R1 u0 ]$ g/ @
and和or的运算结果不是true和false,而是和它的两个操作数相关。; t, ?# r1 b! {* X% U  s
' v. P! r- |  q7 N1 T; N  o
a and b       -- 如果a为false,则返回a,否则返回b
7 ~% s- s( c: t8 e1 \" T3 T7 C( D* G1 ^
a or  b        -- 如果a为true,则返回a,否则返回b
- P; @! W7 _6 A
例如:8 F( e  A( A9 I8 v% N

  m4 F2 ?$ q4 L0 v1 \4 [6 Qprint(4 and 5)           --> 5
  W7 N5 C7 O) ~3 s% t1 O
* {% b+ o8 [4 ^/ N! ~print(nil and 13)        --> nil
$ b) `" d, W6 ]  Z8 ~* P$ y( Y5 P6 J* p
print(false and 13)      --> false: C3 d) m$ M! N5 Z& `/ V# V6 O( p
& H9 u# R5 o+ q! b  n1 k6 g
print(4 or 5)            --> 43 d- @2 n" o1 I8 Y5 V
; L1 l/ Q# {8 I
print(false or 5)        --> 5
+ O! R3 x1 M1 T$ Y
连接运算符..         --两个点
7 s; {* E6 r7 E! U% c7 {; w* f# F1 e8 U1 n8 t7 \" J
字符串连接,如果操作数为数字,Lua将数字转成字符串。* z- F) n/ |" p) W- j9 P
print("Hello " .. "World")      --> Hello World
% L; E8 k* [& B, E( q
8 L% [- |; p" U' c9 ~. @9 V% M, oprint(0 .. 1)                   --> 013 c6 \3 D  l$ g! M1 X
优先级从高到低的顺序:
( [/ l9 m( S( f6 ]" a$ }+ y& [# G^9 x4 ~# d1 @) F
not    - (unary); f8 B' q% o4 d  L% d
*      /7 L2 e$ I7 s8 L6 `+ n
+      -
+ r" a! s1 N9 ~% n6 X1 ~..
3 D' O* E. `5 e7 t2 j0 n5 Y" R<      >      <=     >=     ~=     ==+ Y" o+ V3 N( F0 L3 R7 C1 s
and
3 Z( i5 t5 m3 n4 F1 x7 Gor

6 ]: W1 a% M* `% {- W, C
表的构造构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:* V2 ]) O' q6 f% j% d
2 B0 \" p2 u" I5 p* }
days = {"Sunday", "Monday", "Tuesday", "Wednesday",
. L) N  V+ G1 z  e! L. H! f0 n, W3 P
        "Thursday", "Friday", "Saturday"}# S! U- N$ W, `
7 U. s7 P% u, ?( h3 W, ~
print(days[4])       --> Wednesday+ z- I2 v' `3 r+ t& l

8 ?' F* S0 p$ B$ O' n8 M
赋值语句赋值是改变一个变量的值和改变表域的最基本的方法。a = "hello" .. "world". Z, r) Y3 {7 V+ s9 \

; }$ C. m! a1 j$ W  x% ^% St.n = t.n + 1
4 a& d. g* f2 ?! s: F
局部变量与代码块使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)。
4 V1 c. ^, h9 b( i+ o0 M9 U: ~  {
x = 10' q4 }- |& D* `3 m$ w; |. i2 G
5 }% k) K3 a7 w4 U2 o
local i = 1              -- local to the chunk
% x( X+ G( g0 B/ s7 G' d( d
4 J- J2 q9 B( f. Jwhile i<=x do# e: G( ]& Z) s7 t( w  k/ C* U
/ I7 e9 c; Q! O5 q. i  n
    local x = i*2        -- local to the while body
1 F' ?1 n( |- u& z: i) u, \. K( g3 c9 N( h# w% D
    print(x)             --> 2, 4, 6, 8, ...
' p- m+ @8 N' N# P* r2 q1 l; O5 Q! e+ X, P
    i = i + 14 B3 ?5 Q3 y" P
! L9 V$ x9 y; G  d
end6 g3 j$ u  u, D3 m- h
控制结构语句(if语句)控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,其他值为真。. C0 x* {' B" O- q6 x2 a- a
if conditions then" ?9 X, V& ], p) B, ?7 s

+ m1 ?8 c0 F6 ~+ q* r* x0 ~    then-part
% \9 s5 ?- u) |' t/ L
4 X4 h7 O& \1 v, ~4 k1 tend;3 o) }9 K5 K& h) Q+ l% F9 F
/ t0 V$ z- _: i+ g6 i
if conditions then
4 f) N1 ?' z6 j# V6 M2 R. Y. c& f" m! t! n
    then-part8 C* F2 m6 j5 v9 V  y
3 i, D, }- T5 e) o: n0 _
else1 |8 T8 C& U2 g, D) ^9 ?) g

4 i5 u* L9 G. e; u" ?* v/ t) u( z    else-part
2 A* A! P" [& @8 M3 T* O9 e( R% T" B' t2 R4 @; t" V
end;
5 v; `. R( k/ ?' x* K
break和return语句break语句用来退出当前循环(for、repeat、while)。在循环外部不可以使用。
! Z9 Q1 _: s# q, j+ g3 u5 a* E1 t. L) {/ F
return用来从函数返回结果,当一个函数自然结束时,结尾会有一个默认的return。
, K3 k3 `  m1 n1 R$ O$ k
  j1 ?+ S8 I4 r6 p, _Lua语法要求break和return只能出现在block的结尾一句。
例如:
( L. ?0 a2 G! R5 b& t7 \  z0 l0 e- a3 l( x. f4 t; I
local i = 1
, m: Q$ ]3 e$ i+ a# r0 U8 |; k" x6 v) o- u. f* |
while a do) f2 s4 {6 I& e0 L" a  `, \& U
4 f+ @8 v; H( W. Z/ n
    if a == v then break end# K* L% c) J+ a- Z8 k$ _/ w

, G# W7 ~) m8 J' S4 s+ a( G% T    i = i + 1
9 h9 F- }1 L' {6 \1 A' g( y; y; _
9 T4 a$ R% N2 a- H3 p- Vend
* y  j0 \: M+ |' G
函数定义函数有两种用途:1.完成指定的任务,这种情况下函数作为调用语句使用;2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。
" Q6 T/ N* u$ ^* ]" \) k/ u
语法:
0 B/ R& T8 u6 B9 a. m+ i5 t( s: ~
& ]# ~6 d) M. `function func_name (arguments-list)! N9 p" E% |; t6 M3 C0 v7 U
! l8 |9 n0 A3 M" F, ^1 ~( o! o
    statements-list;
6 N2 D9 k* u% u" N) o. R2 y, N4 ]( s4 g: K! w
end;1 b; z5 F* V( G3 S) I

, S( q: l. a$ @! Z* S9 v" ^2 I4 n
函数调用调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。print(8*9, 9/8)/ t, A$ V: ?% E4 D+ ~

% U7 R+ S9 E+ @: \a = math.sin(3) + math.cos(10)4 z3 `* [8 S# v3 g; w! J

9 ?& y. i! i1 u& S7 Y" Xprint(os.date())

5 c2 o0 F1 m: A3 t$ e& q4 ]
免责
帖子地址打造全网最多免费游戏网站
今日来客 列表模式
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-11 02:20