aul 语法约定和命令行方式
原文链接:http://www.douban.com/group/topic/17549829/
话说看文字性的定义和注意事项最无聊了,所以就来大朵大朵的摘抄吧。
先来热身一下吧!
进入和退出交互环境
在命令行中输入 lua 回车就会以交互模式运行 lua,
键入文件结束符可以退出交互模式(Ctrl-D in Unix, Ctrl-Z in DOS/Windows),
或者调用 OS 库的 os.exit() 函数也可以退出。
来看两个例子
如大多数语言一样,首先要写的就是著名的 hello, world
在 lua 环境命令行输入
print("hello, world")
很眼熟吧,居然和 Python3.x 语法一样。
如果是把 print("hello, world") 保存在 lua 文件中,比如说使用 lua filename.lua
再来看另外一个有点小复杂的例子
例子中首先定义一个是计算阶乘的函数,然后根据用户输入的数字输出结果。
感叹一下,神似 python 那!
-- defines a factorial function
function fact (n)
if n == 0 then
return 1
else
return n * fact(n-1)
end
end
print("enter a number:")
a = io.read("*number") -- read a number
print(fact(a)
Chunk 是什么玩意?
Chunk 是一系列语句,Lua 执行的每一块语句
(可以是一系列语句的组合,还可以是函数,Chunk 可以很大,在 Lua 中几个 MByte 的 Chunk 是很常见的),
比如一个文件或者交互模式下的每一行都是一个 Chunk。
在交互模式下,Lua 通常把每一个行当作一个 Chunk,但如果 Lua 一行不是一个完整的 Chunk 时,
他会等待继续输入直到得到一个完整的 Chunk. 在 Lua 等待续行时,显示不同的提示符(一般是 >>)。
可以通过指定参数让 Lua 执行一系列 Chunk。
例如:假定一个文件 a 内有单个语句 x = 1 另一个文件 b 有语句 print(x)
lua -la -lb
命令首先在一个 Chunk 内先运行 a 然后运行 b。
运行完 Chunk 后进入交互模式则需要加上 -i 选项,如 lua -i -la -lb
除此之外,还可以使用 dofile 函数,在交互模式下:
dofile("test.lua")
然后就可以引用其中的函数等等。
-i和dofile很方便调试、测试代码。
语法约定
标示符:字母 (letter) 或者下划线开头的字母、下划线、数字序列.
最好不要使用下划线加大写字母的标示符,因为Lua的保留字也是这样的。
Lua 中,letter 的含义是依赖于本地环境的。
保留字 :以下字符为 Lua 的保留字,不能当作标识符。
and break do else elseif
end false for function if
in local nil not or
repeat return then true until
while
注意:Lua 是大小写敏感的.
注释:单行注释:--
-- no action (comment)
多行注释:--[[ --]]
--[[
print(10)
--]]
全局变量
定义:
全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,
访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil.
删除全局变量,赋值为nil就可以了,如 m = nil
命令行方式
lua [options] [script [args]]
-e:直接将命令传入 Lua
lua -e "print(math.sin(12))" --> -0.53657291800043
-l:加载一个文件.
-i:进入交互模式.
_PROMPT 内置变量作为交互模式的提示符
lua -i -e "_PROMPT=' lua> '"
Lua 的运行过程,在运行参数之前,Lua 会查找环境变量 LUA_INIT 的值,
如果变量存在并且值为 @filename,Lua 将加载指定文件。
如果变量存在但不是以 @ 开头,Lua 假定 filename 为 Lua 代码文件并且运行他。
利用这个特性,我们可以通过配置,灵活的设置交互模式的环境。
可以加载包,修改提示符和路径,定义自己的函数,修改或者重命名函数等。
全局变量 arg 存放 Lua 的命令行参数。
lua script a b c
在运行以前,Lua 使用所有参数构造 arg 表。脚本名索引为 0,脚本的参数从 1 开始增加。脚本前面的参数从 -1 开始减少。
lua -e "sin=math.sin" script a b
arg 表如下:
arg[-3] = "lua"
arg[-2] = "-e"
arg[-1] = "sin=math.sin"
arg[0] = "script"
arg[1] = "a"
arg[2] = "b"
关于分号
Lua 在每个语句结尾的分号(;)是可选的,同一行中有多个语句的话最好使用分号(;)隔开
(这里说的是最好而不是必须,因为即使没有分号 lua 也会正确执行而不会报错,但是为了更好的阅读建议加上分号)。
aul 语法约定和命令行方式相关推荐
- 如何使用cmd进入打印机选项_怎样用命令行方式添加打印机端口? (已解决)
命令行方式添加打印机是比较简单的,现在我的问题是这样的, 有一台网络打印机,用下面附录的方式安装驱动程序是没有问题的, 一个DOS命令就可以搞定,但是需要创建一个TCP/IP 的端口,即不是 用的LP ...
- shp2sde命令行方式向arcsde批量导入数据脚本的生成步骤
shp2sde命令行方式向arcsde批量导入数据脚本的生成步骤 作者:半块点心 出处:GIS动力站原 1.在dos提示符下执行: FOR /F "eol=; tokens=1,2,3, ...
- Mysql语法大全(命令行)(简洁、明了、全面)
Mysql命令行的语法 另外一个Mysql语法大全的版本:点这里 两个Mysql语法大全以及命令行代码!!!基本上学习Mysql没有问题 嘿嘿!学习是一个长期的过程!!!还会继续更新!!! 基本的My ...
- delphi DCC32命令行方式编译delphi工程源码
本文链接地址:http://blog.csdn.net/sushengmiyan/article/details/10284879 作者:苏生米沿 Borland出品的Delphi,在TIOBE公布的 ...
- MySQL基本操作(命令行方式)
MySQL基本操作(命令行方式) 1.登录MySQL 2.MySQL 创建数据库 3.MySQL 删除数据库 4.MySQL选择数据库 5.MySQL 创建数据表 6. MySQL 删除数据表 7.M ...
- android.mk 添加v7_在Android上以命令行方式移植FFmpeg
最近要做视频I帧提取和摘要生成的项目,在Android平台上的应用,经过调研,发现ffmpeg有很多相关功能的轮子,因此考虑将ffmpeg移植到Android平台.为了更好解耦和以及更多的文档参考,选 ...
- ECS(Linux)连接RDS,使用命令行方式连接实例
使用命令行方式连接实例 通过命令行连接RDS MySQL数据库,连接方式如下: mysql -h<连接地址> -P<端口> -u<用户名> -p -D<数据库 ...
- centos oracle命令,CentOS7命令行方式搭建Oracle11gR2
CentOS7命令行方式搭建Oracle11gR2 CentOS7命令行方式搭建Oracle11gR2 准备工作 vim /etc/selinux/config SELINUX=disabled sy ...
- mysql命令行方式添加用户及设置权限
以前总是喜欢通过phpmyadmin去添加用户和数据库,这次装完系统后,配置了一大堆东东,实在不想安装phpmyadmin了,就通过命令行方式创建了数据库和设置权限,记录一下,免得以后总是百度 关键步 ...
最新文章
- metaweblog php,[PHP]利用MetaWeblog API实现XMLRPC功能
- c代码中 执行sh文件 带参数_创建含有$1参数的Bash脚本以及运行脚本的三种方法...
- mac10.12 安装mysql_在mac os10.12上安装mysql5.7.18
- csds原装的Markdown文档
- shared_ptr四宗罪
- 生产企业ERP流程是什么
- 如何做好ASO应用优化?ios如何aso优化,android aso 优化
- CSS3重复渐变(线性和径向渐变)
- Python四大神兽(迭代器生成器闭包装饰器)
- TuX2:用于机器学习的分布式图计算
- ppt转图片LibreOffice解决方案--java
- python更改图片存储大小_python不改变图片尺寸压缩到指定大小
- cannot enlist more than one non-XA resource
- 修改谷歌浏览器不安全提示
- 数据结构第二遍思维导图
- 养老院人员定位系统包含室内人员定位,老人防跌倒报警系统-新导智能
- OKhttp3基本POST使用
- ThingsBoard 2.5.3发布
- DOS中SET命令的详细用法
- c 编程语言翻译 网站,计算机语言翻译
热门文章
- 增长复盘|我们在小程序实现裂变!日拉新1000+
- 超详细解读OSPF Router-ID
- 风暴控制(storm control)
- 麦克风阵列声源定位解决方案
- s:hidden name=id value=id/s:hidden
- AVL-Cruise纯电动汽车仿真建模教程-能量回收策略的实现
- 【Paper】A Comparative Evaluation of Unsupervised Anomaly Detection Algorithms for Multivariate Data
- elasticsearch数据迁移esm
- 软件的生命周期的若干阶段
- SQLYog 数据连接配置的迁移