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种基本类型:
nil、boolean、number、string、userdata、function、thread和table

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

时间: 2024-08-07 15:24:25

Lua学习小记——语言的相关文章

Lua与C语言间的交互实例_Lua

Lua 是一门轻巧.灵活.扩展性很强的脚本语言,它可以很容易的嵌入到其他语言(C/C++)中使用,这主要得益于其提供了功能强大的 C API,这让其跟 C/C++ 间的互调成为一件很轻松的事. Lua 调用 C Lua 调用 C 函数,其实就是把 C 函数注册到 Lua 中去,把 C 函数地址传递给 Lua 解释器.这个传递是要遵循一个的协议的,即: 复制代码 代码如下: typedef int (*lua_CFunction)(lua_State* L) Lua 和 C 是通过栈(State)

Lua学习笔记之类型与值_Lua

基础介绍 Lua是一种动态类型的语言.在语言中没有类型定义的语法,每个值都带有其自身的类型信息.在Lua中有8种基本类型,分别是: nil(空)类型 boolean(布尔)类型 number(数字)类型 string(字符串)类型 userdata(自定义类型) function(函数)类型 thread(线程)类型 table(表)类型 以上是Lua中的8中基本类型,我们可以使用type函数,判断一个值得类型,type函数返回一个对应类型的字符串描述.例如: local iValue = 10

如何学习C语言

学习C语言不是一朝一夕的事情,但也不需要花费十年时间才能精通.如何以最小的代价学习并精通C语言是本文的主题.请注意,即使是"最小的代价",也绝不是什么捷径,而是以最短的时间取得最多的收获,同时也意味着你需要经历艰苦的过程. 一.要读就读好书,否则不如不读 所有初学者面临的第一个问题便是:如何选择教材.好的开始是成功的一半,选择一本优秀的教材是事半功倍的关键因素.不幸的是,学校通常会帮你指定一本很差劲的C语言课本:而幸运的是,你还可以再次选择. 大名鼎鼎的谭浩强教授出了一本<C语言

学习JAVA语言过程中可能遇到的共同问题

这节教程将讨论一些在学习JAVA语言过程中可能遇到的共同问题. 问题一:编译器找不到类. 解决方法: 确保你已经导入了类或者它的包. 如果对CLASSPATH环境变量有进行设置,要重新复位. 确保类名的拼写跟定义的一样,要注意大小写问题. 如果类在包中,要确保它们处在正确的子目录中. 同时,一些程序员从.java文件名字为类使用不同的名字.要确保你是使用类名字而不是文件名.实际上,使类名和文件名相同就不会出现这个错误了. 问题二:注释器不能找到其中一个类 解决方法: 确保你指定的是类名而不是类的

磁盘-新手学习C语言文件,问题已经在程序中备注,求解答!

问题描述 新手学习C语言文件,问题已经在程序中备注,求解答! //怎样向文件读写字符 #include #include int main() { FILE * fp; char ch,filename[10]: printf("请输入所用的文件名:"); scanf("%s",filename); if((fp = fopen(filename,"w")) == NULL)//为什么这里的filename没有双引号引起来: { printf(&

《Android应用开发攻略》——1.2 学习Java语言

1.2 学习Java语言 1.2.1 问题 Android应用采用Java编程语言编写,然后转换为Android自有的类文件格式--DEX.如果你不知道如何用Java编程,就会觉得编写Android应用非常困难.1.2.2 解决方案 学习Java的资源很多,其中大部分都能够传授你所需的知识,但是在这里要提醒你,有些API类在Android开发中无法使用,请避开与表1-1左列的主题相关的资源. 1.2.3 讨论 下面是一些有关Java编程的书籍和资源: David Flanagan所著的<Java

c语言基础-刚刚学习c语言的数组部分,不懂,求助一下!

问题描述 刚刚学习c语言的数组部分,不懂,求助一下! 输入一组整数,将它们排序后按照由小到大的顺序输出,不知道要不要用到循环语句,求助这个这个程序怎么写 解决方案 #include <stdio.h>void main() { int i, j, temp; int a[10]; for (i = 0; i < 10; i++) { scanf("%d,", &a[i]); } for (j = 0; j < 9; j++) { for (i = 0;

通过这九本开源好书学习 C 语言

书是非常私人的东西,编程类书籍也不例外.我们都是通过阅读书籍来帮助掌握某种语言的基本知识.随后又通过阅读书籍来全面探索这门语言的灵活性.我仔细考察了一些我最喜爱的 C 语言书籍,并从其中选出了对我意义最大的九本. C 语言是一种通用的.面向过程的高级编程语言.也是最具流行度和影响力的编程语言之一.该语言在设计时就被设计为可以通过编译器进行编译,以此来对内存进行底层操作.高效地执行机器指令以及在运行时仅需要最小的支持.很多很多编程语言都得益于 C 语言, C 语言就像是编程界的通用语言一样. C

学习 nasm 语言

学习 nasm 语言 返 回 3. nasm assembly 语法 3.1 nasm 是匹分大小写 3.2 内存操作数表达式 3.2.1 在 nasm 语法里,对 memory 操作数需要加 [] 括号 3.2.2 给 memory 操作数提供一个 displacement 值 3.2.3 指明 memory 操作数的 operand size 3.2.4 提供一个 segment 3.2.5 指明 memory 操作数的 address size 3.3 nasm 伪指令 3.3.1 nas