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

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

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

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

等级头衔

ID : 1

管理员

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

发表于 2026-6-10 16:11:59 | 显示全部楼层 |阅读模式 IP:广东东莞
免责
Lua基础语法(详情可查看Lua程序设计.chm)
- l$ \' j  v" _$ |5 [% @3 C

9 k1 O# {4 J. s6 p
8 E6 p. H0 D7 B+ P) W. ]; ~
  P6 b* W/ K) H& T: A% p

% b6 g2 M* L1 G
保留字(每个都有单独含义)and        break      do         else       elseif
) F2 w- z# Q6 \+ |% Oend        false      for        function   if* Y& O/ d( Y& J
in         local      nil        not        or) r8 p9 z5 {: A2 Z! T8 l. }
repeat     return     then       true       until) A) i! m5 D& D+ j
while
" b& [: c2 P! ]0 V  F. F' H! F) J
注释(注释后代码不会执行)单行注释:--
% i7 c- `/ p6 p" ~2 b6 b4 f) A# a1 G, ?$ s/ ]6 ~! _0 z
多行注释:--[[    --]]* b5 e3 w4 a% ]3 M  S# a
$ o5 t7 W$ @1 V* w
如下:
% B# D7 h) W  y  v5 G--[[9 s- q7 ], u# i! a; J
* z7 d- l! _9 |6 c) M4 l( R9 {
print(10)         -- no action (comment)
6 i: A& c- p- ^- z* M) Y6 W: ]- F# }) m: @# u. c+ X
--]]
- G; J+ P1 l9 W  r
Nil(空值)Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量负nil可以删除该变量。5 R. N3 {5 p4 n  F8 B

& C8 |, X: L4 n, ?# i& A

4 Z: s! \1 l$ Z
Booleans(布尔值)两个取值false和true。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。
6 C5 _) ]- S; t3 [; w4 E2 r" C3 t

5 O$ g9 l1 {. r2 ?+ g+ Z: m
Numbers(数值)表示实数,Lua中没有整数。一般有个错误的看法CPU运算浮点数比整数慢。事实不是如此,用实数代替整数不会有什么误差(除非数字大于100,000,000,000,000)。Lua的numbers可以处理任何长整数不用担心误差。你也可以在编译Lua的时候使用长整型或者单精度浮点型代替numbers,在一些平台硬件不支持浮点数的情况下这个特性是非常有用的,具体的情况请参考Lua发布版所附的详细说明。和其他语言类似,数字常量的小数部分和指数部分都是可选的,数字常量的例子:$ }/ f4 O2 ~$ s" x* M  Q2 C
1 f% m3 B' A! N6 G& s( J/ {5 U
4      0.4    4.57e-3       0.3e12     5e+20
* v, S2 e5 q+ S$ S2 m- [, K& k
Strings(字符串)指字符的序列。lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。这意味着你可以存储任意的二进制数据在一个字符串里。Lua中字符串是不可以修改的,你可以创建一个新的变量存放你要的字符串如下:
6 F' Z5 A: b6 l# g' }9 g& U1 Y* q5 n# @( _9 r, ~2 l
a = "one string"' {+ I7 A1 A' J2 t
; f/ U: \! ?1 `. e
print(a)          --> one string( }  O. E1 _, i5 a! l+ i5 K9 {
Functions(函数)函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数的参数,也可以作为函数的返回值。如下:
  Q% e5 S0 I* ^- X7 D6 C+ J
* x7 S. k! \7 W! l! H9 yfunction 函数名(human)
6 x3 D/ d4 X% {# [    return 1      --返回一个数值:1& Y! p/ y  O& k( J! e2 q
end
  I/ `: d6 d$ x2 d6 r
算术运算符二元运算符:+ - * / ^  (加减乘除幂)- F) V& ]8 x' @3 T" D
8 e2 K9 x# @  \6 U3 r" N9 }
一元运算符:-  (负值)
3 ?+ z% ~8 f, P: \8 `! ~' {1 q3 Y5 z" H$ t, K) K" T' x* z
这些运算符的操作数都是实数。3 [/ `0 u6 @% w
. w8 D# M/ l: s5 v) m
关系运算符<      >      <=     >=     ==     ~=
; t- _/ r3 l/ g5 H3 b( F0 E: N2 l6 @( ~3 y/ Z* ], E
这些操作符返回结果为false或者true;==和~=比较两个值,如果两个值类型不同,Lua认为两者不同;nil只和自己相等。Lua通过引用比较tables、userdata、functions。也就是说当且仅当两者表示同一个对象时相等。- `% ?; V. B4 q5 D2 t0 y
a = {}; a.x = 1; a.y = 0
( p$ A, U/ g+ J/ x: T- D- u  r
b = {}; b.x = 1; b.y = 0
7 |% t+ L( x2 ~% v5 W* {
& @8 E) D2 |0 F, F7 r8 v) a- e1 yc = a% B# x0 @, }/ D

& i/ _! q2 C1 n, q; f9 W9 n' Aa==c but a~=b% \; f9 w9 n3 a" X/ k
逻辑运算符and    or     not
( A3 c$ D; A+ g& \% p6 B/ O
1 o8 B  D0 H) l4 T$ ^4 H8 k逻辑运算符认为false和nil是假(false),其他为真,0也是true.& V& U7 U" m1 ~9 q0 X2 s% a9 s

9 N3 o' ^# V9 ?% u3 G% iand和or的运算结果不是true和false,而是和它的两个操作数相关。
1 L1 p7 D3 `% h/ h' B/ U5 p4 k8 E1 Y6 h: }" I+ G! F
a and b       -- 如果a为false,则返回a,否则返回b
- I1 }# S# u3 m4 z% S* @, |/ x% P; Z: E/ ~1 W- n0 H) {
a or  b        -- 如果a为true,则返回a,否则返回b, p; l/ ^5 P9 }/ T+ _9 m
例如:
' u  P; t8 f* |9 Y. }8 n
+ z; e$ E& e! `. w7 d" u. r# [7 ?8 rprint(4 and 5)           --> 57 W6 Y7 H/ G* M) P! Q

' ^. p! g0 z6 I' e9 m* e# S' Xprint(nil and 13)        --> nil8 t* m. |. k/ g  ]1 R7 v

( d/ u$ K0 ^& [. Z; g. sprint(false and 13)      --> false
- d( }; ~7 m1 t; r, [' c& q
: r# G4 d! X% U: lprint(4 or 5)            --> 4# G1 t. x$ a' C* `
" i. `: N& m6 X. ?
print(false or 5)        --> 5
6 m2 Z: @. S+ h( H. t, K
连接运算符..         --两个点
: p1 |6 {$ l8 J/ e7 U4 |8 J: H: C+ [" @$ D3 m: ]+ g$ u+ ~
字符串连接,如果操作数为数字,Lua将数字转成字符串。3 c' ?9 f% H) A# ~. B
print("Hello " .. "World")      --> Hello World
9 p" M  Q) ?% l+ P4 B8 N- T5 v5 G/ C' \; y: a7 ?
print(0 .. 1)                   --> 01
) _! D  ?$ h! h# @! s! ^* A
优先级从高到低的顺序:' h7 G8 O4 [, q
^/ X) X1 h9 ~+ v0 K  n: G0 B
not    - (unary)
7 l0 r! Z7 r" @, I. _8 H/ u( h: s. h*      /& v* z+ [& A/ o) J6 g3 P
+      -1 Y' ~7 y/ k+ f& w+ [) W) f* `
..
7 v9 m. ?. d) ?6 i$ y<      >      <=     >=     ~=     ==8 y1 |$ u) a$ I0 T
and6 T* j0 ?0 B! h' J  W
or
  @7 p$ n! d: D  ?/ u
表的构造构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:
' F; c( F3 f. _3 w- t; ^
. }0 |2 B% _+ x& Q( t- Ydays = {"Sunday", "Monday", "Tuesday", "Wednesday",
* r$ I0 `* C( |9 k6 d* T. u+ }  _* {, V, f. I- I! D: R1 ], O; k
        "Thursday", "Friday", "Saturday"}" d  [' B  s* O* U

( e0 R! r7 K6 o# uprint(days[4])       --> Wednesday9 V, h5 M  v# w- ?. _8 g9 o4 B
# G8 d% v% q+ m' `7 ~$ {! X# M
赋值语句赋值是改变一个变量的值和改变表域的最基本的方法。a = "hello" .. "world"6 g) M- `$ T9 C# m- V( F5 x  U

$ U& c; [) N- d7 [" l$ t" O: ?t.n = t.n + 14 x0 B5 F1 E4 L' w$ H
局部变量与代码块使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)。
9 [4 S$ R# y: ~3 E+ P! v6 Y. E
x = 10; m) s" z; s5 K( J$ o

9 Z/ @, i' `4 Clocal i = 1              -- local to the chunk0 v: R' d4 a4 [! A0 u

4 a$ g$ i- p* }, T0 Y. t! y+ U4 _while i<=x do
; I3 c7 i* }" `
1 f, W4 ?# d3 n1 r2 o- G    local x = i*2        -- local to the while body3 I' Y* K/ v$ W
7 G- g- F- @8 ~  D5 y9 q5 X5 m! O
    print(x)             --> 2, 4, 6, 8, ...5 _. J: X, v) ^9 o0 {# Z6 l3 H

& N  z0 K/ l, Z8 S    i = i + 1
7 X4 B* `/ D% C# ^. G6 s7 n! U
+ O4 ~2 x6 C4 A, e% M6 t' V0 xend
7 y8 \; V7 O. R: S6 s
控制结构语句(if语句)控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,其他值为真。" e# \8 b1 ^8 I5 A
if conditions then" [) J1 I* q" e" k  G2 J

% k; y1 b9 a: X' [3 V( f5 b    then-part( j9 U' |* c9 Q1 B# l, _

( f* T2 z6 O  S) Zend;6 _4 g" J% Z% p% @) Z/ ?
5 g, _2 i) u  K: ]2 r. f
if conditions then- t  S1 z( t4 j, n' Z
9 U; {# p# S# N& m4 p2 x4 P
    then-part
" U- A* K% J! P- }
, ?) O1 s  [& P+ }4 pelse
) [3 B; L3 J9 y/ v# `6 A( |3 d3 S- z
    else-part
4 {, f2 M0 ]0 I
! T, W: G2 B4 z9 {% @5 k0 E5 X  bend;8 z  K1 `) F" n! u) S2 P
break和return语句break语句用来退出当前循环(for、repeat、while)。在循环外部不可以使用。
8 y4 @! j, V: e9 c) h4 d8 G7 d/ F& t2 v1 j( k- j
return用来从函数返回结果,当一个函数自然结束时,结尾会有一个默认的return。$ h, b5 r$ a& b% i  M
% m) M$ ^$ o$ v1 H% R
Lua语法要求break和return只能出现在block的结尾一句。
例如:
8 B! z2 m' ~, ~% A8 x! I$ P/ x
: d! [% g& }( v) F( Nlocal i = 1: m$ H1 S5 s8 D0 r; Y9 X

/ S! \7 u0 e# T" x9 c6 V$ ~' fwhile a do
. r  \. V4 o/ v4 X
" ~, }* f! e9 v$ c* n& P    if a == v then break end" U* k6 y" J" X% V( t, G7 @

: D9 t' b& d* c# n8 Q    i = i + 1
/ z2 i+ @' w, n! q( f' D$ R6 a) V1 Q4 T. u; R
end6 x9 c, l8 H& _  N$ z0 D
函数定义函数有两种用途:1.完成指定的任务,这种情况下函数作为调用语句使用;2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。7 a( \$ }' }) B2 A5 n% N$ b
语法:
  U1 n; K5 X$ v; w: N& D2 ^! @) \& B+ d5 I9 H8 ]0 _, Q
function func_name (arguments-list), m  A! g6 _( W; _4 [
  u. d* U1 V+ s  p. |, G5 E0 c% u
    statements-list;
: X9 H' c& n& \, {0 e1 }. R/ W' Q. h2 e9 T2 }
end;
) w) q% A$ k& G% r4 I9 f
3 k4 L% Y& {. C& x4 R7 l
函数调用调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。print(8*9, 9/8)
5 w" P8 U0 N# c
" l8 B& K& T6 Wa = math.sin(3) + math.cos(10)8 [6 F) G9 M4 h3 z& H: q

* x, X5 g; N4 W) S3 \% [print(os.date())

7 f4 r. u! q, C! g" `
免责
帖子地址 打造全网最多免费游戏网站,部分资源失效,私聊站长补
今日访客 列表模式
10月上白班,问题处理时间等晚上
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-10-25 09:43

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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