闲扯LUA之一

闲扯LUA之一




·001Chunk是一系列语句,可以是一个语句、一系列语句的组合、或者函数。 一行代码是一个chunk, 一个.lua脚本被看做是一个chunk

·002语句结尾的分号是可选的(不建议把多条语句写在同一行)。

·003如果一行不是一个完整的Chunk,Lua等待续航,并给出提示符(一般是>>)

·004>lua -la -lb(-l选项会调用require,lua在指定的目录下搜索文件并依次执行之)。

·005>lua -i -la(-i选项让lua执行指定Chunk后进入交互模式)。

·006dofile("test.lua")(dofile函数加载文件并执行之)

·007全局变量不需要声明,给一个变量赋值后即创建了一个全局变量。访问一个未经初始化的全局变量不会出错,得到的结果为nil

·008Lua是大小写敏感的。

·009单行注释:--

·010多行注释:--[[   --]]

·011命令行方式:lua [options] [script [args]]

·012>lua -e "print (math.sin(12))"(-e选项:将命名直接传给Lua执行

·013_PROMPT内置变量作为交互模式的提示符:>lua -i -e "_PROMPT='apache>'"

·014全局变量arg存放lua的命令行参数。脚本名的索引0,脚本的参数索引从1开始,脚本以前的参数从-1向左递减。

·015lua中8个基本类型:nil、boolean、number、string、userdata、function、thread、table

·016函数type可以测定给定变量或值的类型:type(print)   --> function  ,  type("h") --> string

·017给全局变量赋nil可以删除该变量

·018在控制结构的条件中除了false和nil为假外,其余都为真。Lua认为0和空串都是真

·019number类型表示实数,Lua中没有整数。

·020Lua中的字符串是不可修改的。可以创建一个新串存放想要的旧串中的数据。

·021Lua自动分配和释放对象内存

·022Lua可以高效的处理字符串,大小为1M的字符串在Lua中是很常见的。

·023可以使用"或'表示字符串,如非需要(字符串嵌套时)尽量保持风格统一。

·024\[和\]分别表示左右中括号

·025可以使用[[字符串]]表示字符串,在这种表示方式中,如果第一个字符为换行符则会忽略。此表示方法常用于包含大段代码。

·026Lua会在string和number类型之间进行自动的类型转换,比如print("10" + 12)   --> 22,print("10 + 12")   --> 22,print("hello" + 12)   --> ERROR(cannot convert "hello")

·027 ..表示字符连接。当在一个数字后使用..时必须加上空格以防止解释失败print("10" .. 12)   --> 1022,print(10 .. "12")   --> 1022

·028 尽管数字和字符串可以自动转换,但是10 == "10"是false

·029 可以使用tonumber()函数显示的将字符串转化为数字,如果转化失败返回nil。

·030 可以使用tostring()将数字转化为字符串,此种转换不会失败。

·031 函数是第一类值(与其它变量相同),因此函数可以被存放在普通变量中,可以作为函数的参数和返回值。

·032 Lua可以调用使用Lua或者C实现的函数,Lua所有的标准库都是使用C是实现的。标准库包括:string库、table库、I/O库、OS库、算数库、debug库。

·033 userdata可以将C数据存放在Lua变量中,userdata在Lua中除了赋值和相等比较外没有预定义的操作。

·034Lua中不等用~=表示。

·035nil只和自己相等。

·36Lua通过引用比较userdata、table、function类型的变量,这意味着只有两者表示同一对象时才相等

·037not和or的运算结果不是true或false,而是和它的操作数有关。例如:a and b   --> 如果a为真则表达式等于b,否则表达式等于a。a or b --> 如果a为真则表达式等于a,否则表达式等于b

·038构造器是用来创建和初始化表的表达式,最简单的构造函数是{}

·039days = {"Sun", "Mon", "Tue"},其中第一个元素"Sun" 的默认索引是1, day[1]="Sun"

·040表可以使用任意的表达式初始化,也表(数组)可以包含不同类型的值。比如:a = {math.sin(1), "hello", 100000}

·041可以初始化一个表作为record:a = {x = 0, y = 1}   <--> a = {}; a.x = 0; a.y = 1

·042将表的域置为nil则可以删除这个域

·043对于表访问:

a = {"red", 12, {123, 456}}
print(a[1])     --red
print(a[2])     --12
print(a[3])     --table: 0071B490
print(a[3][1]) --123
print(a[3][2]) --456

b = {clr = "red", size = 12, {px = 123, py = 456}}
print(b.clr)     --red
print(b.size)   --12
print(b[1].px) --123
print(b[1].py) --456


·044可以使用如下的方式显示的表示初始值的索引:a = {["+"] = "plus", 1 = "hello"}。不推荐使用0最为元素的索引,因为这将导致很多库函数无法使用。

·045a = {1, 2, 3, }最后的,号是可选的,写上可以方便扩展。

·046a = {1, 2; "hello", "wrold"; print},域中元素的分隔符可以是,也可以是;通常使用";"间隔不同类型的元素。

·047Lua可对多个变量同时赋值,赋值语句的右值会依次赋给左边的变量。并且Lua会先计算右边所有的值再进行赋值操作,
     因此  x, y = y, x会交换x、y的值 。如果: 变量个数 > 值的个数,则按变量个数补nil 。如果:变量个数 < 值的个数,则多余的值会被忽略。

·048多值赋值常用于交换变量,或函数调用结果返回给变量,比如a, b = fun()此表达式将fun函数返回的两个值赋给a,b。

·049使用local创建一个局部变量(推荐使用局部变量,访问局部变量的速度会快些),局部变量只在被声明的代码块内有效。在交互模式下需要将local包含在do...end中间(相当于C语言中的{}),因为在交互模式下local i = 1就是一个Chunk,在之后的语句中i已经失效啦。使用局部变量可以避免命名冲突。

·050对于for var = exp1, exp2, exp3 do   ... end,exp3为步长,缺省为1,且三个表达式的值仅计算一次。例如:for i = 1, f(x) do ... end。f(x) 只会在循环前计算一次。var是被自动声明的局部变量只在循环内有效。

·051范型for循环:a = {"Sun", "Mon", "Tue",}; for i, wk in ipairs(a) do print(i, wk) end 输出结果:

1 Sun

2 Mon

3 Tue

for key in pairs(a) do print(key) end 输出结果:

1

2

3

·052Lua要求break和return只能出现在Chunk的最后一句(end或else或until之前)。如果需要在chunk的中间使用break或return则可使用do break/return end实现



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值