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

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

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

[复制链接]
灌水成绩
19646
120
20240
主题
帖子
积分

等级头衔

ID : 1

管理员

积分成就 威望 : 8 点
贡献 : 9 次
下载币 : 449 枚
在线时间 : 2003 小时
注册时间 : 2013-9-5
最后登录 : 2026-10-23

发表于 2026-6-10 16:11:59 | 显示全部楼层 |阅读模式 IP:广东东莞
免责
Lua基础语法(详情可查看Lua程序设计.chm)
; w- R2 r; }9 I7 R$ K
- r  O# G& g/ T% y( u
) i+ b6 F' y9 P. O7 a0 m2 k' D
  t8 I, i6 C% {( m" h
) F; t% Z& ]: D& p, U
保留字(每个都有单独含义)and        break      do         else       elseif
( i8 `5 T# O1 Y4 n: Wend        false      for        function   if1 n; _" q, P- a
in         local      nil        not        or
+ P' f* L) i5 p* T" @% H2 Grepeat     return     then       true       until; e  K: @9 ?" M! a( F! L
while

9 K6 u# F! F/ ?3 s
注释(注释后代码不会执行)单行注释:--& B% [% ^4 D) r* G2 B
0 v) C" @! y/ H; `" U& g) |
多行注释:--[[    --]]" b  K& S+ c. S' Z7 t

; G7 Q! _0 z$ o# k" b& X8 S( g
如下:, Q. _1 u; F7 N# c/ P
--[[. I' u% G5 ^+ o9 v3 ]4 m4 b  l
( s, C. m1 f" i- ^
print(10)         -- no action (comment)
' }% Z; R  F$ ]$ s; S* \+ _# r+ n5 V: C' g# h( ?! P
--]]
% f7 U  L4 H1 U5 k! G7 z
Nil(空值)Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量负nil可以删除该变量。
7 `* p- W8 I! Y$ W7 c5 i% |$ @
' a) O% _. Z; r* \! J$ @
- o3 J& J6 U5 M9 t2 k
Booleans(布尔值)两个取值false和true。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。6 y  t" O( Y5 z$ a: m

* L, q9 L- D# [( Y
Numbers(数值)表示实数,Lua中没有整数。一般有个错误的看法CPU运算浮点数比整数慢。事实不是如此,用实数代替整数不会有什么误差(除非数字大于100,000,000,000,000)。Lua的numbers可以处理任何长整数不用担心误差。你也可以在编译Lua的时候使用长整型或者单精度浮点型代替numbers,在一些平台硬件不支持浮点数的情况下这个特性是非常有用的,具体的情况请参考Lua发布版所附的详细说明。和其他语言类似,数字常量的小数部分和指数部分都是可选的,数字常量的例子:6 O' K2 F. O/ e

: n# g5 C" {  P! G. B1 k7 k4      0.4    4.57e-3       0.3e12     5e+20
, r5 R5 M4 d3 m1 m1 R' A
Strings(字符串)指字符的序列。lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。这意味着你可以存储任意的二进制数据在一个字符串里。Lua中字符串是不可以修改的,你可以创建一个新的变量存放你要的字符串如下:
6 M6 r' q' I0 B, P& c. W7 }4 @" {5 q
a = "one string"# V0 c0 y- I1 F9 D( I7 y( M
) N& Q* e: E. N+ f, ]
print(a)          --> one string% ]0 {) E# G  W" {8 X* z
Functions(函数)函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数的参数,也可以作为函数的返回值。如下:
0 W  i" Z6 b" `& _0 |2 M& y/ ^0 a$ c/ B
function 函数名(human)& P# U; Z" O: l/ X: c
    return 1      --返回一个数值:1/ D& ^- y+ ~0 h! N; f
end) y$ Y& {3 E) |' o$ P# b0 q
算术运算符二元运算符:+ - * / ^  (加减乘除幂): |0 ], e" E/ p6 v& ?$ G9 [1 D
- @! L$ I9 {. P$ i8 [8 M% Q! u: `
一元运算符:-  (负值)0 G5 r+ b+ ]& p1 m
% p' O6 P4 S6 z; q7 l2 Y
这些运算符的操作数都是实数。
, e2 V2 M$ x# C, D
" v! L' j1 Z: N! V
关系运算符<      >      <=     >=     ==     ~=& P5 I! D; `; Y& Q( J6 e+ q
+ c% {7 N6 F8 N2 o. }2 G4 o1 r
这些操作符返回结果为false或者true;==和~=比较两个值,如果两个值类型不同,Lua认为两者不同;nil只和自己相等。Lua通过引用比较tables、userdata、functions。也就是说当且仅当两者表示同一个对象时相等。
$ H& _- t; S- x8 b( c/ x* M( C
a = {}; a.x = 1; a.y = 0/ \) `$ m- H' }# {) c+ [$ r
+ F; g7 M2 U( ~$ G5 Z7 h
b = {}; b.x = 1; b.y = 0- R; p1 }: P" N) J1 o  B" e( G

* }( v# _9 r& x! F9 q0 s, w5 i2 `, Vc = a
3 I8 |8 ~7 c8 O
6 b/ G+ |. z: Sa==c but a~=b6 g9 o3 w: C: h1 f, Q2 p+ ?
逻辑运算符and    or     not
  A. i5 E' Q* y, d" x- T% _# X) {3 U( f# n
逻辑运算符认为false和nil是假(false),其他为真,0也是true.
! r" ?1 n7 |/ N' Z2 \; k
4 b6 G* G& @3 d2 ~" r* ^5 Yand和or的运算结果不是true和false,而是和它的两个操作数相关。
- L" i' m9 |3 e. M2 H# X( a
! e0 \% v  s9 n6 C6 i9 x' ka and b       -- 如果a为false,则返回a,否则返回b. W% C% P9 S1 ~

6 c+ K9 Z0 p' G( q1 L- ma or  b        -- 如果a为true,则返回a,否则返回b
5 S* G7 e, \$ e, H1 c8 u; A
例如:
  n* f. r+ q4 z: O
# [9 V+ B- ~- g& ^6 h8 O; b6 _% Qprint(4 and 5)           --> 5# ^+ k+ L6 _( P5 r# [9 k0 Z4 W  T
1 M& L, g; `- v
print(nil and 13)        --> nil
+ z( z5 E, m" k) a# U( `' @. L2 K0 x6 c& S  d
print(false and 13)      --> false- W) y8 P5 f' s7 a$ a

' w' x7 h% }2 wprint(4 or 5)            --> 49 S6 ]: w! q/ H; x8 f

! `" y$ m7 C2 |+ i1 p! D0 wprint(false or 5)        --> 57 N8 z" L" Y) V2 v* r& k+ C
连接运算符..         --两个点% k/ V- }2 s! _

! a5 a4 T" T4 ?8 B8 f5 o+ a# a字符串连接,如果操作数为数字,Lua将数字转成字符串。
+ p6 X! r( T- N* ^1 L
print("Hello " .. "World")      --> Hello World1 f+ p& t* s- l& J* X- J, d% C

% S0 M" n- b$ N% S) pprint(0 .. 1)                   --> 01
  C& T5 @+ g  Z" b* ~; `" j
优先级从高到低的顺序:; E$ _8 }- q# w( D  g
^
  Y% J4 L0 v1 j8 Tnot    - (unary)
3 j: X  |* D: I. S*      // R! ]" L9 |8 q7 J% a! p
+      -
3 c: X9 W  x% u4 Y& e/ ^" Q..: J' I+ _  m9 N+ _8 d' S3 q
<      >      <=     >=     ~=     ==5 i7 c) ]: N4 q3 |/ E6 x) A
and# p* V' C# l6 g/ i( Y2 x# j9 C
or
$ u) ?4 r& A' I7 f
表的构造构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:# {( Q- c2 P4 X  ~
. Q: V& n: Z" ?( w
days = {"Sunday", "Monday", "Tuesday", "Wednesday",
  A1 w9 S8 D( i: }. M! W. R* |% G% R) ^+ D6 G) `
        "Thursday", "Friday", "Saturday"}! }1 S, q3 W* j* O/ l
& h( j" v+ {! w3 _/ J+ ^
print(days[4])       --> Wednesday
3 ^4 j2 G. \! v( |+ T' q& P+ ^) M' E4 q
赋值语句赋值是改变一个变量的值和改变表域的最基本的方法。a = "hello" .. "world"
/ O7 h) R! O3 A0 s
5 S; H' }( M/ ?/ N) P5 x8 vt.n = t.n + 1/ e) c( u4 V6 {+ y: Z# m% j8 @$ Y
局部变量与代码块使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)。) N' y  N6 K# u0 F$ F# J
x = 10
/ M. f8 H9 f1 K* i( h0 r# {' k. w, A' c
local i = 1              -- local to the chunk* s* m6 O2 x! o# O
  C" x  U) u6 g. l
while i<=x do
8 i1 B* N9 D; x% g9 T# i! Y6 _2 j2 G
    local x = i*2        -- local to the while body
7 i/ j) n; c; k, f
1 b  ?* {- b+ }0 H+ E    print(x)             --> 2, 4, 6, 8, ...
' C" S. e, _2 `" \
" w$ X: @( t  v4 s. g1 ~    i = i + 1
: ~/ z' k- e. n9 o* }
! ~/ V( t2 a# R# r# F+ w! Dend
. X$ O/ B8 d, [' Z- Q/ ?
控制结构语句(if语句)控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,其他值为真。
% T) @; Y2 @& g. U, q8 ]) X
if conditions then( g7 }: e0 N1 w5 Q$ J4 \
1 q7 G. v6 p0 U* ]0 `: E6 O
    then-part2 Q7 L* ~, c. k4 D1 e! T/ z
- W6 h2 |5 h: c3 b8 N' N% J
end;
  {1 J9 U. g$ q4 M5 W7 ]. a" Y; h: }+ i+ w) T9 i$ B5 @; q
if conditions then
; _, {3 E' M4 s5 [4 i7 w, v
5 w4 l$ K- c6 ^( ~- w    then-part
6 Z* V( f7 P, o5 Y! e+ |
" X# f8 y& U1 m, t, j* Telse# W' t, r' [& `" `) Z/ K

. C6 T# l- \7 t$ b( j2 c    else-part# I7 h( m0 `2 Q6 L& P

' E. H/ b( v; N; bend;6 _$ e+ m( T4 L7 i) w
break和return语句break语句用来退出当前循环(for、repeat、while)。在循环外部不可以使用。% H& l# o* j% W1 t% q

) Z! u# P- J- G* rreturn用来从函数返回结果,当一个函数自然结束时,结尾会有一个默认的return。
7 Z2 x% _1 j, h* T
1 B. ?/ Z& X* f. ]1 q. DLua语法要求break和return只能出现在block的结尾一句。
例如:
, U8 K8 H  V, a$ i" c( c; s$ _/ ?! u9 t9 m
local i = 1
( g3 f: L. @% ?, l  U0 V! a0 g7 q* ?% ]( ~8 f* E. C  c
while a do: o) j; ~9 W+ p$ `& r

0 ^$ {; y% \5 {1 x6 |5 e4 }6 D% q    if a == v then break end! K  z0 |' w3 `' h
, k% e2 o& F; L4 m3 C2 o: `
    i = i + 13 c5 N9 U4 ~5 z% ~

2 f& H! s7 h$ Z- eend( }7 Z% i5 n: B+ P
函数定义函数有两种用途:1.完成指定的任务,这种情况下函数作为调用语句使用;2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。
! E  B& x: P, w- K
语法:
# E% y" M$ ]2 {& D* P0 h( d7 O: n/ e+ D* x, {& x; s4 w
function func_name (arguments-list)
8 p0 v' G' u# P
- f2 Y# `3 d2 _; H1 C  B, t    statements-list;
. |/ b  j0 ?6 ?7 H) F& @) \+ ?9 S9 j
end;
8 \. Y* f1 `% ]5 E- |' z9 ~4 m) m, c, `2 g5 t: S
函数调用调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。print(8*9, 9/8), l) u/ O2 N( _; {

, F( s' p/ O3 M& U/ N( E" V; J* Ua = math.sin(3) + math.cos(10)! @7 a' k3 O2 C* o

2 D& p# k, K3 f0 m4 X3 Oprint(os.date())
% t+ Q0 A$ c' `) }6 Y
免责
帖子地址 打造全网最多免费游戏网站,部分资源失效,私聊站长补
今日访客 列表模式
10月上白班,问题处理时间等晚上
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-10-24 14:27

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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