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

 找回密码
 立即注册
搜索
查看: 7170|回复: 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 s+ r' B. O5 M

/ P( I. o. W) c, z& W

) t; Z2 t% n* n6 v6 t( S1 D: \

% s) ?: O6 j1 A

0 O$ N  r8 m$ _, F$ p, l5 Z% ]3 S
保留字(每个都有单独含义)and        break      do         else       elseif# `- X" Y5 `9 q9 W# G0 b
end        false      for        function   if# t" c5 _0 y! b  {8 |1 u7 @
in         local      nil        not        or4 |2 [' s' r* k8 O7 Q  x+ _+ Q# L
repeat     return     then       true       until4 M# Y# P0 z2 r
while

$ y! @2 c  Y9 R+ u* Z' O4 \
注释(注释后代码不会执行)单行注释:--8 N2 a, h0 F" x5 z% D  N6 z; a6 ?

# l: Q+ }; J4 S9 O多行注释:--[[    --]]: h* y; ]& [4 k, }
. q3 B$ C6 z" t  W* b" [
如下:
# Q( m% F( b& h+ E! t) i--[[
. R" K; q, A4 K& B8 ?; @: Z
9 W. y. B1 _, O1 I, aprint(10)         -- no action (comment)- d1 U8 t0 g9 {& s, n* X- Y8 ~

* `8 Q6 a) Q' ~--]]
( p/ e' t( l+ t; ^! g( p
Nil(空值)Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量负nil可以删除该变量。: c' U, k4 D2 T+ ]8 L8 l
. T  m7 E. p$ {  G% A" G; j

$ N  V* w" L) L/ z  t' b6 y
Booleans(布尔值)两个取值false和true。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。
( ]. @+ G1 V5 ~

2 d' K9 L; ]& A3 L
Numbers(数值)表示实数,Lua中没有整数。一般有个错误的看法CPU运算浮点数比整数慢。事实不是如此,用实数代替整数不会有什么误差(除非数字大于100,000,000,000,000)。Lua的numbers可以处理任何长整数不用担心误差。你也可以在编译Lua的时候使用长整型或者单精度浮点型代替numbers,在一些平台硬件不支持浮点数的情况下这个特性是非常有用的,具体的情况请参考Lua发布版所附的详细说明。和其他语言类似,数字常量的小数部分和指数部分都是可选的,数字常量的例子:
* [& d4 x6 C* k- Z1 \/ D& M+ ?6 u1 a0 d! w
4      0.4    4.57e-3       0.3e12     5e+20
4 a( B9 x# P9 N4 B
Strings(字符串)指字符的序列。lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。这意味着你可以存储任意的二进制数据在一个字符串里。Lua中字符串是不可以修改的,你可以创建一个新的变量存放你要的字符串如下:# h; j2 l5 L/ u9 P

% D: p: h3 [* Y) sa = "one string"
4 n* a8 d; c, E$ `2 |0 ]3 e; ^  H0 M$ d. ^) r! {+ P8 F  B+ r6 R  R/ G
print(a)          --> one string
1 V7 ~& ?! j# }
Functions(函数)函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数的参数,也可以作为函数的返回值。如下:. G& F: S( V9 [" L+ u, n8 U, A+ [

/ _& E# k& c/ e& |' Lfunction 函数名(human)/ O7 L. H' m2 y% }) w! G$ [
    return 1      --返回一个数值:1
) n, I9 N5 K+ Fend6 A% ]! e# I: I
算术运算符二元运算符:+ - * / ^  (加减乘除幂)+ j7 q7 Y7 v: E- f( a7 H

$ K% i8 c! ?) f2 V/ @  ?8 m6 @一元运算符:-  (负值)
; u! r' b2 Z1 \) g" I/ N  S
& ~- {& A# A- D: Y" g, J; V, Q这些运算符的操作数都是实数。
1 f" Q" a" u( O4 m" g- U3 p! J
4 w" |" n) T' \/ _1 q
关系运算符<      >      <=     >=     ==     ~=
/ ]" g7 ~8 k8 X3 R; ^# C2 v% J; Q7 h% u* r5 a' Z" d% {+ I
这些操作符返回结果为false或者true;==和~=比较两个值,如果两个值类型不同,Lua认为两者不同;nil只和自己相等。Lua通过引用比较tables、userdata、functions。也就是说当且仅当两者表示同一个对象时相等。2 p( V9 e& w5 ~, o$ {! f
a = {}; a.x = 1; a.y = 0
5 e) k. E: R- n4 \3 B7 V/ G9 \/ P* a$ ]+ c
b = {}; b.x = 1; b.y = 0$ c# r" f8 A5 i/ l$ N5 S

* v( p- s. e) S' v& j# V0 ?+ Cc = a  @) g9 H& s! m& E

) W" r: F0 C3 Z# t( ra==c but a~=b
; q7 \, S3 D2 t7 |8 R
逻辑运算符and    or     not
2 ~6 y: \% Y+ j1 M' e; Z3 E, ]' e9 x4 {  ]: j" F* [, n
逻辑运算符认为false和nil是假(false),其他为真,0也是true.$ R+ H* X/ x7 ]5 v; z% p

4 L$ ~* l, K8 \! ^' j# W. L/ Uand和or的运算结果不是true和false,而是和它的两个操作数相关。
3 A0 y. V; |: Y9 x2 J# ^3 S* _( S2 `* F& u7 d) S+ U, V( ^& j4 V( ]+ d
a and b       -- 如果a为false,则返回a,否则返回b% \. f, ]6 L- v% V: c3 O3 E
$ p- v( W2 t7 k9 K0 M! m; U
a or  b        -- 如果a为true,则返回a,否则返回b! L. F9 b9 Y+ @7 j! Y( B3 f* y
例如:# W5 `- v# X4 F& W. B
& X  ^. m; h; J8 K6 F# x) |
print(4 and 5)           --> 58 |& e3 E6 L3 O6 k$ g( R  Z# d
. I; d, u# W. c" W3 X, U  F% _* J
print(nil and 13)        --> nil. w: J# V- |! A3 q
" [) G3 r: \2 D
print(false and 13)      --> false
' l# V) g2 u9 q5 _% c+ c5 x. \0 H% u% O* I
print(4 or 5)            --> 4
' L2 a& G4 P. S, D3 g
2 ~% }% H! V+ y- J: ]print(false or 5)        --> 5" M& v' F2 j8 q7 n
连接运算符..         --两个点
/ T( R, s* H" H6 s* u- |3 S) s
0 U# d- ?& P; \4 R字符串连接,如果操作数为数字,Lua将数字转成字符串。
" B8 j$ c  R2 B  H! M- F( o
print("Hello " .. "World")      --> Hello World
1 G1 n5 w' D/ g0 J
1 _& z, X# u5 a; vprint(0 .. 1)                   --> 01
4 e6 |  U6 r: @8 @
优先级从高到低的顺序:* X6 X& f: e; _% A
^
9 b0 k. P0 h2 V; H' E4 P! T7 ]1 Fnot    - (unary)
' s6 l2 ~$ A4 \) h" L# P5 k* h( |*      /6 |; ?1 @; A3 U: E* i( Y
+      -
0 b; R# v! H) F, _.., s4 p4 |( y2 S
<      >      <=     >=     ~=     ==
8 b1 `9 L( F' J4 h5 Vand
, L% M! @3 t& H! ?3 P( Lor

9 H" c! ~& D, d
表的构造构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:
& L7 Q- I8 v' a3 p7 Y
' D+ d" C& y) ^. z3 cdays = {"Sunday", "Monday", "Tuesday", "Wednesday",! \& s8 I8 r; \; ?! C4 m& y

% e& m4 T% c( g% Q        "Thursday", "Friday", "Saturday"}6 x5 t: X4 Y! A0 g

- a: r1 L8 M5 Nprint(days[4])       --> Wednesday
) a6 Y8 l7 |% Y/ g1 t+ g1 {% ?" ?6 _& q7 r- f, W
赋值语句赋值是改变一个变量的值和改变表域的最基本的方法。a = "hello" .. "world"
8 b8 U! e" d/ x2 R. y3 D' ]0 }5 y/ ?! P1 E! J3 ^9 E# r0 Q) c/ v
t.n = t.n + 12 Z! @2 g5 C5 x& L0 [
局部变量与代码块使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)。/ i# C+ r) j7 `
x = 10- ]" M+ b/ M' h" N6 Z7 L
6 a# @, f9 n- ~* Y6 F
local i = 1              -- local to the chunk
  G3 c# L/ W/ h* k# P. v, Y7 I4 \
) J: {* Q( q8 i2 N9 N+ Ywhile i<=x do
! ?0 i* s# X1 k) r4 [/ M% Q7 o0 e+ A6 T2 K9 l" S
    local x = i*2        -- local to the while body
9 h- m( P# w4 j6 d- E3 g. U+ d4 K* M1 a, {+ l0 |& j# H
    print(x)             --> 2, 4, 6, 8, ...
% p4 \3 A, J0 P5 ~
( d7 }2 m3 n3 g    i = i + 1) m* M4 l& c. k7 V6 n7 S. P
( [* Y0 }4 j' N% b' I! m
end
) ^0 A6 i1 Y( r/ D1 w7 `
控制结构语句(if语句)控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,其他值为真。
7 E, j8 x: P6 C0 a: N  k
if conditions then4 E: k7 T1 ~$ V) r1 D

6 G- N0 \2 U9 n& b4 x( V9 T+ l    then-part# [. Y( ]4 d: G" z0 X% ?

+ a% P. ^( S. oend;" L& r! G% u/ h5 a: {8 m6 s8 N
- d8 n3 g' T0 y9 F+ o( T
if conditions then! g& R/ l3 f/ c; P+ L4 h4 a
# T7 T7 R1 M8 o$ X) T/ V
    then-part
' v  k& c5 e$ \
: Y' j& p, d) \9 relse3 s9 }+ X! G( {. j. {' q% O* r, N9 o1 g* j
1 s* g) ?0 q6 N% P1 _
    else-part: m4 {, |( H' x! A. Q
; n2 D9 S: j; S1 B" S0 h
end;
0 D% H" W& v5 ^. N5 ]0 w1 e
break和return语句break语句用来退出当前循环(for、repeat、while)。在循环外部不可以使用。
4 b; Y" E! z( u9 Z- s  E
) s6 j7 v+ v, U+ r1 P% treturn用来从函数返回结果,当一个函数自然结束时,结尾会有一个默认的return。
+ Z( d& G5 R7 X7 C' a# t- N* |4 w5 y4 F8 V7 T( A0 T% A8 X/ A
Lua语法要求break和return只能出现在block的结尾一句。
例如:
+ e" c3 A+ b9 W2 s( }* l( w
$ b$ E6 @2 n9 P  N6 Qlocal i = 19 l  @( \6 _% y

' d) p: i8 M$ C: jwhile a do4 y+ O# b" r4 q0 H: U
" K% m5 _* e8 D) T, {
    if a == v then break end
* F4 ~- [& A- ?
8 |. I8 `4 l$ [, \9 m    i = i + 1
2 c. Y/ d6 R( k) D' `2 }4 }* Z) ?- r: y& ^2 E8 f" M
end
4 l+ J0 u3 G  y0 t# _& v( l) `3 d
函数定义函数有两种用途:1.完成指定的任务,这种情况下函数作为调用语句使用;2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。! y) Y1 A) ]' L3 f; [2 k
语法:% v7 f# Y( q3 ^/ X& B
% j4 C' Q8 V; t6 U/ p1 @
function func_name (arguments-list)' Z( L3 G' |2 ]* E0 O. a) ]

2 Z; u) Y, L' D/ V$ {/ Z& e6 g. T  a    statements-list;
  u4 p5 l5 A, H; S9 V3 w4 V/ k5 X8 S8 t, e4 R% C" V
end;* D* X+ k, w9 D' }7 t, M
8 H/ m* O. I" u) b2 E6 ]# k% _( I
函数调用调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。print(8*9, 9/8): J7 Z/ ?2 T9 F- j3 ?

# a2 L7 K) h$ n7 V$ y' ?/ ea = math.sin(3) + math.cos(10)5 A: W; D+ `; |5 e) T
  p4 q" ~# E1 }2 Y3 v" F
print(os.date())

* D: m5 l( L6 W. {+ t$ S9 B. n
免责
帖子地址打造全网最多免费游戏网站
今日来客 列表模式
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-2 10:59

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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