lua syntax

程序块

Lua执行的每段代码都被称为一个程序块(chunk),一个程序块是一连串的语句或命令。一个程序块可以只包含一条语句,也可以由多条不同语句定义构成。也就是说,程序块可以是任意大小。

Lua通常被作为一种数据描述语言来使用,几兆字节的程序块是很常见的,Lua解释其对于大型程序块处理不会有任何问题。

a = 1
b = a*2
-- 分号可有可无
a = 1;
b = a * 2;
-- 换行可有可无
a=1; b=a*2
a=1 b=a*2

连续的Lua语句之间并不需要分隔符,作为可选可使用分号来分割语句。

x = 10;
y = x * 2;
-- Lua语句间并不需要分隔符
x=10 y=x*2
-- Lua语句间可使用分号分割语句
a = 1; b = a*2

立即执行文件

$ lua
> print("Hello World");
Hello World

$ vim hello.lua
print("Hello World")

$ lua hello.lua
Hello World

计算阶乘的函数,用户输入一个数字,然后打印出结果。

$ vim fact.lua

function fact(n)
    if n==0 then
        return 1
    else
        return n*fact(n-1)
    end
end

-- test
print("enter a number : ")
a = io.read("*number") -- read a number
print(fact(a))

另一种运行程序块的方式是使用函数dofile(),此函数会立即执行一个文件。

$ vim lib.lua
-- file lib.lua
function norm(x,y)
    local n = x^2 + y^2
    return math.sqrt(n)
end

function twice(x)
    return x*2
end

$ lua
> dofile("lib.lua") -- 加载程序库
> n =  norm(3,4)
> print(twice(n))
$ vim script.lua
function norm(x,y)
    return (x^2 + y^2)^0.5
end

function twice(x)
    return 2*x
end

$ lua
Lua 5.3.4  Copyright (C) 1994-2017 Lua.org, PUC-Rio
> dofile("script.lua")
> n = norm(3.4, 1.0)
> print(twice(n))
7.0880180586677

如果要测试一段代码,dofile()函数会比较有用。可同时打开两个窗口,一个文本编辑器用户用于编辑代码文件,另一个命令行窗口运行解释器的交互模式。当编辑完代码并保存后,可以再解释器的交互模式窗口中执行dofile("script.lua")来加载新的代码。这样便可以测试新代码,调用其中的函数并打印运行结果。

词法规范

标识符

Lua中用到的名字也就是标识符,Lua中的标识符可由任意字母、数字、下划线构成,不能以数字打头。

避免使用下划线打头后跟一个或多个大写字母的标识符,Lua将此类标识符保留用作特殊用途。

$ lua
Lua 5.3.4  Copyright (C) 1994-2017 Lua.org, PUC-Rio
> _VERSION
Lua 5.3
  • Lua中“什么是字母”的概念依赖于区域设置(Locale)
  • Lua中标识符对大小写敏感

关键词

Lua中的某些关键词是系统所预留的(保留字),不能作为名字使用。

  • Lua中保留标识符_作为“哑变量(Dummy Variable)”使用
  • Lua中的保留字不能作为标识符
and break do else elseif end false for function if in local nil not or repeat return then true until while

注释

Lua行注释为--,块注释为-[[ ]],常用技巧是将代码放入--[[--]]中间,重启用只需要修改---[[

-- 计算两个数的平方和的根
function norm(x,y)
    return (x^2 + y^2)^0.5
end
--[[
function twice(x)
    return 2*x
end
--]]

全局变量

全局变量(Global Variables)无需声明,仅需将一个值赋给一个全局变量即可创建。

Lua中访问未初始化的变量不会引发错误,访问结果是一个特殊的值nil

$ lua
> print(x)
nil

通常没有必要删除一个全局变量,若要删除某个全局变量,只需将其赋值为nil

$ lua
> x = nil
> print(x)
nil

若变量具有较短的生命周期,应将其声明为局部变量。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,710评论 4 376
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,839评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,295评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,776评论 0 223
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,198评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,074评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,200评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,986评论 0 214
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,733评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,877评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,348评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,675评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,393评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,209评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,212评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,003评论 2 280

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,523评论 0 38
  • 第一篇 语言 第0章 序言 Lua仅让你用少量的代码解决关键问题。 Lua所提供的机制是C不擅长的:高级语言,动态...
    testfor阅读 2,569评论 1 7
  • 上初中和高中时老师总说到了大学就轻松了,就可以混了。于是抱着上大学就是玩的混的心态虚度年华。工作后才发现,你不会平...
    明星A原芳阅读 133评论 0 0
  • 写下这几个字,觉得很奢侈!太多的速食性工作,让慢性子的人也开始焦虑。而在属于自己的时间里,可以慢慢来。 阅读,慢慢...
    陌上花开qzy阅读 511评论 6 2
  • 诶,一直以来基本都是在看别人的博客,自己基本没有写什么东西,需要用的时候就是各种找资料,各种翻文档。12月份的第一...
    丶夏小正阅读 823评论 2 1