Lua学习小记——语言-阿里云开发者社区

开发者社区> boxti> 正文

Lua学习小记——语言

简介:
+关注继续查看
1.起点,经典hello world:

print("Hello World")

这与大多数脚本语言没什么两样,总体来说如果你对JavaScript、Ruby、Python之类有所学习的话,LUA还是相当简单的

2.函数定义,类似JS,用begin end代替大括号:

function fact (n)

    if n == 0 then

       return 1

    else

       return n * fact(n-1)

    end

end


function其实就是lambda算子.

3.  8种基本类型:
nilbooleannumberstringuserdatafunctionthreadtable

boolean类型除了false和nil是false之外,其他都是true
lua支持函数式编程,因此函数是一等公民,userdata用于存储C语言的数据,待深入。thread与多线程编程有关。table是lua的基本数据结构,是array和hash的综合体,比较奇怪的是默认索引从1开始,而不是通常的0。看例子:

days = {"Sunday", "Monday", "Tuesday", "Wednesday",

              "Thursday", "Friday", "Saturday"}

w = {x=0, y=0, label="console"}


4. lua与ruby一样支持多重赋值和函数可以返回多个值,常见控制结构没有什么好说的。

5.可变参数,lua有很浓重的C味道,可变参数也与C一样,用...表示:
function g (a, b, ...) ... end

也可以通过表来传递命名参数:

rename{old="temp.lua", new="temp1.lua"}


6.局部变量的声明 local i=0,仅在声明的代码块内有效。如果没有声明为local,将自动成为全局变量,一个变量在赋值前是nil,通过将变量声明为nil可以删除该变量

7.LUA是有尾递归优化的,也提供了各种高阶函数以及闭包等等特性。

8.loadstring函数,一般其他解释语言中的eval函数相似,不过他是返回一个chunk(每个chunk都是匿名函数)让你执行,比如

f = loadstring("local a = 10; return a + 20")

print(f())        --> 30

也可以通过loadfile将整个文件载入作为chunk。

9.require,用于加载文件,会搜索环境变量LUA_PATH设定的路径,同时能判断文件是否已经加载来避免重复加载。比较奇特的是路径的设置,与一般的路径完全不同,其实就是用?当占位符,然后require filename的时候,用filename代替这些文号,比如:

?;?.lua;c:\windows\?;/usr/local/lua/?/?.lua

当你require 'lili'的时候,就会寻找下列路径的文件:

lili

lili.lua

c:\windows\lili

/usr/local/lua/lili/lili.lua


10.lua通过loadlib函数可以加载动态链接库

11.pcall在保护模式(protected mode)下执行函数内容,同时捕获所有的异常和错误。若一切正常,pcall返回true以及“被执行函数”的返回值;否则返回nil和错误信息。

文章转自庄周梦蝶  ,原文发布时间 2007-11-29

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9534 0
算法学习之路|墙壁涂色
蒜头君觉得白色的墙面好单调,他决定给房间的墙面涂上颜色。他买了 33 种颜料分别是红、黄、蓝,然后把房间的墙壁竖直地划分成 nn 个部分,蒜头希望每个相邻的部分颜色不能相同。他想知道一共有多少种给房间上色的方案。
1508 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
2932 0
算法学习之路|火星数字
火星人是以13进制计数的: 地球人的0被火星人称为tret。
1038 0
算法学习之路|部分A+B
正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6。
885 0
前端学习的心路历程
在我刚接触前端时,就被他的灵活自由度深深吸引。可以说在学校并没有前端这些知识,只能靠查阅W3school进行简单的Html标签学习。看别人的文章,看一些官方文档来进行学习,在这里我将我从零学习前端的经历进行慢慢的阐述。
37 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13228 0
算法学习之路|最大子阵
给定一个 n×m 的矩阵 A,求 A中的一个非空子矩阵,使这个子矩阵中的元素和最大。其中,A的子矩阵指在 A 中行和列均连续的一部分。
955 0
算法学习之路|完美数列
给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列。
928 0
算法学习之路|卖个萌
萌萌哒表情符号通常由“手”、“眼”、“口”三个主要部分组成。简单起见,我们假设一个表情符号是按下列格式输出的:
866 0
+关注
boxti
12535
10037
文章
1327
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载