加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua基础

发布时间:2020-12-14 22:12:43 所属栏目:大数据 来源:网络整理
导读:本文介绍Lua的基本知识,面向有编程基础的读者。 Lua是什么? Lua是一个高速、灵活、简单、易学的嵌入式语言。你可以在这里下载Lua。 REPL 在命令行下输入 lua 即可运行Lua的REPL,非常方便: ; luaLua 5.1.4 Copyright (C) 1994-2008 Lua.org,PUC-Rio x = 0

本文介绍Lua的基本知识,面向有编程基础的读者。

Lua是什么?

Lua是一个高速、灵活、简单、易学的嵌入式语言。你可以在这里下载Lua。

REPL

在命令行下输入lua即可运行Lua的REPL,非常方便:

; lua
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org,PUC-Rio
> x = 0 
> while x < 10 do 
>> x = x + 2 
>> print(x)
>> end
2
4
6
8
10
> return x
10
>

语法

--[[
多行
注释
]]

if state == 5 then
  doSomething() -- 单行注释
elseif foo then
  a = true
else
  b = false
end

上面是一个小例子。Lua不用分号,也不用花括号,而是使用thendo之类的语句。上面的代码也展示了条件语句。

变量

直接var = value即可,无需声明变量类型。默认全局变量。你可以一次赋值多个变量:var1,var2,var3 = val1,val2,val3.

  • nil表示“无”,包括未定义的变量。ActionScript之类的语言有nullundefined,Lua将两者合并为nil
  • 只有nilfalse为假,其他值均为真。

运算符

Lua具有大多数标准的运算符,以下按优先级由低到高排列:

or
and
<     >     <=    >=    ~=    ==
..
+     -
*     /     %
not   #     - (unary)
^

和C有些不一样:

  • 逻辑运算符ANDORNOT换成andornot
  • 不等号为~=而不是!=
  • ..连接字符串。
  • ^指数运算,例如10 ^ 2输出100,大多数语言中,^表示XOR。
  • #获取长度。

如果你在思量位运算符在哪里?答案是没有。不过 Lua 5.2增加了 bit32 库。

注意:

  • 不支持+=++
  • 赋值语句不会返回所赋的值,所以foo(a = 3)a = b = 1导致语法错误。

循环

while

i = 1

while i <= 5 do
  i = i + 1
  print(i)
end

传统的while循环。

repeat

i = 5

repeat
  i = i - 1
  print(i)
until i == 1

这种情况下,循环体至少运行一次。

for

x = 1

for i = 1,11,2 do
  x = x * i
  print(x)
end

格式如下:

for var = start,limit,step do
  -- code here
end

等价于如下的while循环:

var = start

while var <= limit do
  -- code here
  var = var + step
end

C语言中类似的循环是这样的:

for (int var = start; var <= limit; var += step) {}

step可以是负数,反过来循环。

循环的终止

使用break关键字:

while true do
  if condition then
    x = x ^ 2
  else
    break
  end
end

Lua没有continue关键字。

函数

function foo()
  local x,y = something(4,5)
  return x ^ y
end

function something(arg1,arg2)
  local ret1 = (arg1 * arg2) ^ 2
  local ret2 = (arg1 - arg2) ^ 2
  return ret1 + ret2,ret1 * ret2
end

上面的代码说明定义函数的先后顺序没有关系,这和C、C++等编译型语言不同。

我想指出的是:

  • 局部变量需要使用local关键声明。
  • 函数可以返回多个值。
  • 不直接支持参数的默认值。

下一步:《Lua数据结构与标准库简介》


原文 Lua for Programmers Part 1: Language Essentials
翻译 Segmentfault

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读