Lua - 基础语法

Hello World

交互式编程

Lua 交互式编程模式可以通过命令 lua -i 或 lua 来启用:

[[email protected] lua]$ lua
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> print("hello world")
hello world

脚本式编程

我们可以将 Lua 程序代码保持到一个以 lua 结尾的文件,并执行,该模式称为脚本式编程,如我们将如下代码存储在名为 hello.lua 的脚本文件中:

print("hello world")

使用 lua 命令执行以上脚本,输出结果为:

[[email protected] lua]$ lua hello.lua
hello world

或者将代码修改为如下形式来执行脚本:

#!/usr/bin/lua
print("hello world")

为 hello.lua 添加可执行权限,并执行

[[email protected] lua]$ chmod a+x hello.lua
[[email protected] lua]$ ./hello.lua
hello world

注释

单行注释:

-- 单行注释

多行注释:

--[[
  多行注释
  多行注释
--]]

数据类型

Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。值可以存储在变量中,作为参数传递或结果返回。

Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。

数据类型 描述
 nil  只有值 nil 属于该类,表示一个无效值(在条件表达式中相当于 false)
 boolean  包含两个值:false 和 true
 number  表示双精度类型的实浮点数
 string  字符串由一对双引号或单引号来表示
 function  由 C 或 Lua 编写的函数
 userdata   表示任意存储在变量中的 C 数据结构
 thread  表示执行的独立线程,用于执行协同程序
 table  

我们可以使用 type 函数测试给定变量或者值的类型:

print( type(nil) )                             -- nil
print( type(true) )                            -- boolean
print( type(10.4 * 3) )                        -- number
print( type("Hello world") )                  -- string
print( type(print) )                           -- function
print( type({"a", "b", "c", "d"}) )            -- table

nil

nil 类型表示一种没有任何有效值,它只有一个值 nil,例如打印一个没有赋值的变量,便会输出一个 nil 值:

> print(undefined_value)
nil

对于全局变量和 table,nil 还有一个 “删除” 作用,给全局变量或者 table 表里的变量赋一个 nil 值,等同于把它们删掉。

boolean

boolean 类型只有两个可选值:true 和 false,Lua 把 false 和 nil 看作是 “假”,其他的都为“真”。

string

字符串由一对双引号或单引号来表示。

> print("it‘s ok")
it‘s ok
> print(‘This is a "hello world" program‘)
This is a "hello world" program

也可以用 2 个方括号 “[[]]” 来表示一块字符串。

html = [[
<html>
    <body>
        <a href="http://www.lua.org/">Lua</a>
    </body>
</html>
]]

使用 “..” 拼接字符串:

> print("hello" .. "world")
helloworld

使用 “#” 计算字符串长度:

> print(#"abcdefg")
7

循环

while 循环

while(condition)
do
   statements
end

for 循环

数字 for 循环

for v = e1, e2, e3 do block end

v 从 e1 变化到 e2,每次变化以 e3 为步长递增 v,并执行一次 block。e3 是可选的,如果不指定,默认为 1。

泛型 for 循环

for i, v in ipairs(a)
do
    -- do something with i & v
end 

i 是数组索引值,v 是对应索引的数组元素值。ipairs 是 Lua 提供的一个迭代器函数,用来迭代数组。

repeat ... until 循环

repeat ... until 循环类似其他语言的 do ... while 循环。

repeat
   statements
while( condition )

条件控制

格式

if exp then block {elseif exp then block} [else block] end

函数

定义:

function max( a, b )
    if a >= b
    then
        return a
    else
        return b
    end
end

多返回值:

function maxmin( arr )
    if #arr < 1
    then
        return nil, nil
    end

    local max = arr[1]
    local min = arr[1]
    for i, v in ipairs(arr) do
        if arr[i] > max
        then
            max = arr[i]
        end
        if arr[i] < min
        then
            min = arr[i]
        end
    end
    return max, min
end

max, min = maxmin({2, 4, 3, 0, 1})

可变参数:

function average(...)
    local sum = 0
    local args = {...}
    for i, v in ipairs(args) do
        sum = sum + v
    end
    return sum/#args
end

print(average(1, 2, 3, 4))

运算符

算术运算符

+、-、*、/、%、^(乘幂)

关系运算符

==、~=(不等于)、>、<、>=、<=

逻辑运算符

and、or、not

其他运算符

..(拼接字符串)、#(计算字符串或 table 的长度)

字符串

字符串的常用操作

-- 字符串全部转为大写字母
string.upper("hello")                            -- HELLO

-- 字符串全部转为小写字母
string.lower("HELLO")                            -- hello

-- 替换字符串
string.gsub("tooth", "o", "e")                   -- teeth    2

-- 查找字符串
string.find("hello world", "or")                 -- 8    9

-- 反转字符串
string.reverse("Lua")                            -- auL

-- 格式化字符串
string.format("%4d-%02d-%02d", 2016, 1, 1)       -- 2016-01-01

-- 将整型数字转成字符并连接
string.char(97, 98, 99, 100)                     -- abcd

-- 返回第一字符的 ASCII 值
string.byte("ABCD")                              -- 65
-- 返回第四字符的 ASCII 值
string.byte("ABCD", 4)                           -- 68

-- 返回字符串长度
string.len("lua")                                -- 3

-- 返回字符串的指定次数的拷贝
string.rep("abc", 3)                             -- abcabcabc

-- 拼接字符串
"dead" .. "line"                                 -- deadline

数组

实例:

#!/usr/bin/lua

array = {"a", "b", "c"}
for i= 0, #array do
    print(array[i])
end

输出为:

nil
a
b
c

在 Lua 索引值是以 1 为起始的,如果知道的索引没有值则返回 nil。但是也可以使用 0 或负数作为索引:

#!/usr/bin/lua

array = {}
for i= -1, 1  do
    array[i] = i * 2
end
for i= -1, 1  do
    print(array[i])
end

输出为:

-2
0
2
时间: 2024-08-23 00:35:04

Lua - 基础语法的相关文章

CC3.2+Lua(2) ——Lua基础语法1

[唠叨] 首先,我已经默认你已经学过至少一门宿主语言了(C++.Java等),然后转向学习Lua. 因为51cto中对于Lua语言没有代码高亮,为了让代码看起来丰富多彩,我只好用截图了. 本节内容仅介绍Lua的简单基础语法,更多用法请百度:Lua中文教程 . Lua参考手册 . [学习感慨]     > 语句末尾不需要加分号 ;      > 语句块不是用花括号 { } , 而是 do 语句块 end 表示语句块的开始和结束.         而 花括号 {} 表示的为一个 表结构 .    

Lua基础语法讲解

Lua 是什么? Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy.Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发. 设计目的 其设计目的是

Python学习的个人笔记(基础语法)

Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅,一开始保存在word上,代码不是很好看,于是决定复制到博客里面,可能有复制过程中出错的,或者我本身在理解方面有出错的地方,希望能得到指正,谢谢  后续的内容我会继续学习…… python下载地址  www.python.org Python 分为2.7和3.3两个版本,3.3有些库不兼容,因此用2.

Cocos2d-x 脚本语言Lua基本语法

Cocos2d-x 脚本语言Lua基本语法 前面一篇博客对Lua这门小巧的语言进行了简单的介绍.本篇博客来给大家略微讲一下Lua的语法.不会长篇累牍得把Lua的全部语法都讲一遍,这里通过下面几点来讲Lua语言的基础语法: 输出语句 变量定义及赋值 方法定义及调用 for迭代器的使用 --输出语句,"--"为Lua语言凝视 print("Hello Lua") --输出"Hello Lua" --定义变量.local为Lua的keyword,用来声

lua基础

lua基础 1.开发环境IDE及语法高亮 mac上安装lua brew install lua (1)sublime Text 2 新建lua.sublime-build的规则 (mac) { "cmd":["/usr/local/bin/lua","$file"], "file_regex":"^(...*?):([0-9]*):?([0-9]*)", "selector":"

Java基础语法

Java的基础语法中包含字符集.标识符和关键字.变量和常量.语句.注释.运算符和表达式这些基本要素. 一.关键字 编程语言都有一些保留的单词,用于定义该语言,这些单词对于编译器有特殊含义,不能作为标识符使用: Java中的true.false.null这三个保留字,不能作为标识符使用,对于编译器有特殊含义: main是一个用于描述Java程序开始方法的特殊名称,它不是一个关键字: abstract 抽象 boolean 逻辑运算: 布尔 break 打破: 断开 byte 字节: case 例,

关于JS脚本语言的基础语法

JS脚本语言的基础语法:输出语法  alert("警告!");  confirm("确定吗?");   prompt("请输入密码");为弱类型语言: 开始时要嵌入JS代码:<script type="text/javascript"></script>: 关于写程序是需注意的基本语法:1.所有的字符全都是英文半角的:2.大部分情况下每条语句结束后要加分号:3.每一块代码结束后加换行:4.程序前呼后应:

前端学PHP之正则表达式基础语法

前面的话 正则表达式是用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分割.匹配.查找及替换操作.在PHP中,正则表达式一般是由正规字符和一些特殊字符(类似于通配符)联合构成的一个文本模式的程序性描述.正则表达式有三个作用:1.匹配,也常常用于从字符串中析取信息:2.用新文本代替匹配文本:3.将一个字符串拆分为一组更小的信息块.本文将详细介绍PHP中的正则表达式基础语法 [注意]关于javascript的正则表达式的详细信息移步至此 历史 在PHP中有两套正则表达式函数库,两者功

java 基础语法

第一周接触java基础语法,上课听得头痛,还是半懂不懂,放学后讲的啥子都忘了. 这是老师给的周末作业: 1.输入长与宽计算长方形面积与周长.(用精度类型计算)2.输入一个学生三科成绩,计算平均分.3.输入int型市场价格,购买价格,计算差额,差额显示为单精度浮点型.4.42页第二,计算房贷那道题.5.输入一个学生成绩,学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示.6.题目:输入三个整数x,y,z,请把这三个数由小到大输出.程序分析:我们想办法把最小的数放到x