Hello World

交互式编程

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

[huey@huey-K42JE 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 命令执行以上脚本,输出结果为:

[huey@huey-K42JE lua]$ lua hello.lua
hello world

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

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

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

[huey@huey-K42JE lua]$ chmod a+x hello.lua
[huey@huey-K42JE 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 * ) ) -- 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 <
then
return nil, nil
end local max = arr[]
local min = arr[]
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({, , , , })

可变参数:

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

运算符

算术运算符

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

关系运算符

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

逻辑运算符

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-01-01 -- 将整型数字转成字符并连接
string.char(, , , ) -- abcd -- 返回第一字符的 ASCII 值
string.byte("ABCD") --
-- 返回第四字符的 ASCII 值
string.byte("ABCD", ) -- -- 返回字符串长度
string.len("lua") -- -- 返回字符串的指定次数的拷贝
string.rep("abc", ) -- abcabcabc -- 拼接字符串
"dead" .. "line" -- deadline

数组

实例:

#!/usr/bin/lua

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

输出为:

nil
a
b
c

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

#!/usr/bin/lua

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

输出为:

-2
0
2

Lua - 基础语法的更多相关文章

  1. Lua基础语法讲解

    Lua 是什么? Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. Lua 是巴西里约热内卢天主教大学( ...

  2. (一)lua基础语法

    1.从hellowrold开始 --语法和Python比较类似,直接像Python一样使用print即可 --这里我可以直接写中文,显然被当成了注释.在lua中,两个-表示注释 --[[ 这种形式可以 ...

  3. lua——基础语法

    -- test lua: for learning lua grammar -- line comment --[[ block comment ]]-- -- print hello world p ...

  4. Nginx详解二十二:Nginx深度学习篇之Lua解释器安装及基础语法

    解释器 Lua:Lua是一个简洁.轻量.可扩展的脚本语言 Nginx+Lua优势充分的结合Nginx的并发处理epoll优势的Lua的轻量实现简单的功能切高并发的场景 安装Lua 1.安装解释器:yu ...

  5. 大体了解Lua的语法

    Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱. 在Lua中,一切都是变量,除了关键字.请记住这句话. I. 首先是注释 写一个程序,总是少不了注释的. 在Lua中,你可以使用单行注释和多 ...

  6. Lua基础 函数(一)

    转自: http://blog.csdn.net/wzzfeitian/article/details/8653101 在Lua中,函数是对语句和表达式进行抽象的主要方法.既可以用来处理一些特殊的工作 ...

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

    Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅, ...

  8. python基础语法及知识点总结

    本文转载于星过无痕的博客http://www.cnblogs.com/linxiangpeng/p/6403991.html 在此表达对原创作者的感激之情,多谢星过无痕的分享!谢谢! Python学习 ...

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

    Cocos2d-x 脚本语言Lua基本语法 前面一篇博客对Lua这门小巧的语言进行了简单的介绍.本篇博客来给大家略微讲一下Lua的语法.不会长篇累牍得把Lua的全部语法都讲一遍,这里通过下面几点来讲L ...

随机推荐

  1. OpenCV中的常用函数

    1.cvLoadImage:将图像文件加载至内存: 2.cvNamedWindow:在屏幕上创建一个窗口: 3.cvShowImage:在一个已创建好的窗口中显示图像: 4.cvWaitKey:使程序 ...

  2. C# 多个个Dictionary合并更优雅的写法

    Dictionary 现在有两个Dictionary的对象,想把两个对象的中数据合并成一个. 使用for循环的话觉得非常不合适,于是考虑是否有相应的方法,网上找了很多,都是for循环,最后终于找到了一 ...

  3. [读书笔记]了不起的node.js(三)

    这周的nodejs学习内容为几个依赖包的使用,把书上的例子都敲了一遍.这篇就以例程为线索,复习一下一周的工作. 1.connect 这个例程主要是使用connect依赖包,connect提供一个中间件 ...

  4. POJ 3678--Katu Puzzle(2-SAT)

    感觉这题比较裸,表现出了2-sat的本质. 不过构图我想的还是太简单了,a&b=1我只连了 a1->b1,b1->a1,但其实是不对的.这样连,a0和b0可以同时选到.应该连a0- ...

  5. maven创建web项目

    上一次自己使用Maven还是在大三在学校做项目时.现在公司有个新项目,想重新使用一下maven,顺便记下一些步骤 1.安装maven 1.1 访问(http://maven.apache.org/), ...

  6. [iOS基础控件 - 6.3] 使用可视化连线方式指定dataSource、delegate

    对着要指定dataSource或者delegate的控件右击,然后拖动线到指定的控制器上

  7. iOS开发-网络-合理封装请求接口

    概述 如今大多App都会与网络打交道,作为开发者,合理的对网络后台请求接口进行封装十分重要.本文要介绍的就是一种常见的采用回调函数(方法)的网络接口封装,也算的是一种构架吧. 这个构架主要的idea是 ...

  8. mac下8080端口到80端口的转发

    MAC OS 本质上还是 Unix 系统, Unix 系统大多默认情况下非root用户是无法使用小于1024的常用端口的.这时候如果你开发中需要在普通用户下用到80端口, 比如 tomcat, 比如 ...

  9. EntityFramework 连接数据库出错

    本文转载:http://www.cnblogs.com/shuang121/archive/2012/03/19/2406121.html 总结:选择“是”时,连接字符串的密码会暴露出来,“否”的时候 ...

  10. CAS Proxy 的相关文章

    cas代理模式的原理及配置 http://my.oschina.net/mashiguang/blog/69312 剖析CAS Proxy的设计原理 http://www.blogjava.net/s ...