lua是一种动态类型语言, 不用特别声明变量以及指定类型, 首次赋值即为声明. 说到此点, 我觉得动态语言的这种特点与汇编倒是蛮象的: 不管你是什么类型, 对于底层而言, 它代表的就是一内存地址, 而操作符代表的就是对这些地址及存在于这些地址里的量进行操作而已. 闲话少说, 继续看pil, 今天的内容是: types and values.
笔记内容:
1. lua提供了八种数据类型: nil, boolean, string, number, userdata, function, thread, table. 如果想看某个表达式是何种类型的, 可以使用type()函数, 它的返回值是string类型:
> print(type(10.4*3))
number
> print(type(type(10.4*3)))
string
2. 一个变量, 可以被多次赋以任何类型的值. 相比之下, lua中使用函数指针时的简单, 到了令人咋舌的程度: 再也不需要象c里那样弄个指针传来传去的了, 比如: a = print , 而后就可以用a(3)来打印表达式的值了. 让我觉得最爽的一点就是: 使用table+函数赋值的方式, 可以非常容易的实现函数表, 从而避免出现大量的if else语句. 形如下:
function func_1( para )
para = para + 1
return para
end
function func_2( para )
para = para+2
return para
end
func_table = {
["func1"] = func_1,
["func2"] = func_2,
}
print ( func_table["func1"](1) )
打印的结果是:
2
选择string作为 key, 是为了让你了解在lua里, 作函数表是如何的方便.
3. 全局变量在第一次赋值前, 默认是nil; 删除全局变量, 也是将此变量赋值为nil. nil值, 也常作为函数的无效返回值来使用.
4. boolean类型有两个值: false 和 true( 全为小写 ). 在条件表达式中, 只有false和nil才表示假, 其余任何值均表示真(0也表示真). 比如这些值:
if false then print( "ok" ) end
if nil then print("ok") end
if "" then print("ok") end
if '' then print( "ok" ) end
if "haha" then print( "ok") end
if 0 then print("ok") end
在上面的这些语句中, 只有前两条语句打印不出ok, 其它皆可以.
5. 对于number类型, lua只提供real实型数. 没有整数类型, 按pil的说法: as it does not need it.... Moreover, most modern CPUs do floating-point arithmetic as fast as (or even faster than) integer arithmetic. 我想, lua自身的这些"狡辩"已经有足够的说服力, 不用再罗索了. 什么叫自由? 看这里:
>print( string.sub( "hello", 1.1, 2.2 ) )
he
其效果等同于: print( string.sub( "hello", 1, 2 ) )
6. 都说lua的string类型功能很强大, 可就目前我的使用而言, 并没有感受到这种强大给我带来的更多的便利性, 我想, 可能还是码lua码得少了. lua里的string类型, 可以存放任意长的字符串, 一个字符串, 一旦创建便不可更改. 有人说, 这样操作起来岂不是效率很低? 其实, 也不尽然, 你想嘛, 那些对串进行操作的函数: sub, find, copy, replace, cat等等. 其中, 很多确实本身并没有要求一定要修改串本身, 很多函数都是不修改串的, 而同时, 修改串的那些操作,
还不如直接创建一个新串来得方便. lua对字符串的内存管理, 还是比较棒的, 编程者不用去管它的分配与回收, lua会根据自己的一套引用计数机制来自行决定何时释放掉这个串, 同时, 正是由于不可修改串本身, 也使得lua的字符串操作变成了单纯的引用操作, 这样效率应该是更高了.
字符串常量, 可以使用单引号, 也可以使用双引号括起来. 但是, 要培养一种良好的编程习惯: 固定使用一种风格的声明形式. 转义字符, 一样在前面加 "/" . 以/ 后引出的数字, 可以表示一个asc字符, 但/的数字最多不会超过3位.
定义含有多行的字符串时, 可以使用 [[ ]] 标识, 这样就不用在每行之间加/n作转义了.
lua 提供字符串与number类型之间的自动转换功能. 所谓的自动转换, 就是视调用时的函数行为, 决定当前的操作是按字符串处理, 还是按数值型处理, 比如: "10"+1, 这种情况会按数字处理, 因为字符 串没有加法操作, 如果想连接两个字符串, 要用 .. 运算符. 而 "10"..1, 其结果为: 101 . 当然, "a"+1这样的操作, 是非法的, 因为lua的转换, 并不是按asi来作, 而是等于执行了一个 atoi( "10"), 然后再加1.
在其它场合, 如果要将字符串转为数字, 使用tonumber, 转换失败时, 返回nil. 比如: tonumber("a")返回值就为nil. 如果要将数字转换成字符串, 有两种方法: 一种是使用tostring函数, 一种是使用连接符将数字和一个空串连接起来: 10.."", 其结果为:"10"
分享到:
相关推荐
lua学习笔记
自己学习lua记得笔记,做任务用的~很基础的东西,想要的拿走,免费
**lua (VC环境) 学习笔记** 在深入学习lua编程语言并将其应用于Microsoft Visual C++(VC环境)时,我们需要了解几个关键知识点。lua是一种轻量级的脚本语言,设计目标是作为嵌入式语言,使得游戏开发、系统管理、...
### Lua基础学习笔记 #### 一、Lua简介与特点 Lua是一种轻量级且高效的脚本语言,广泛应用于游戏开发、网页应用、图形界面等领域。对于已有其他编程语言基础的学习者来说,掌握Lua通常较为迅速。Lua的设计哲学是...
【Lua学习笔记之表达式】 在Lua编程语言中,表达式是构成程序的基本元素,用于表示计算或逻辑操作。表达式的结果可以是一个值,也可以是一个布尔值,这取决于执行的操作。下面我们将深入探讨Lua中的各种表达式类型...
元表是Lua的特色之一,它可以关联到任何表,并定义表的行为,比如如何进行索引和比较操作。 3. ** 函数与闭包 **:Lua中的函数是一等公民,可以作为参数传递、返回结果或者在表中存储。闭包是指有权访问其自身自由...
【cocos2dx_lua开发笔记】是一篇个人实践总结,主要涵盖了使用cocos2dx_lua进行游戏开发的一些关键点,包括...通过学习和理解这些笔记,开发者能够更好地理解和运用cocos2dx_lua进行游戏场景、UI元素和动画效果的构建。
以下是对Lua学习的一些关键知识点的详细介绍: 1. **基础语法**:Lua的语法与C语言类似,包括变量(全局和局部)、赋值、数据类型(如数字、字符串、布尔、表、函数和nil)。变量在Lua中是动态类型的,不需要预先...
### Lua学习入门教程 #### 一、引言 本文旨在为初学者提供Lua脚本语言的基础教程。假设读者已经具备一定的编程基础,如了解Basic或C等语言的基本概念。Lua是一种轻量级、高效的脚本语言,常用于游戏开发和其他需要...
Lua的类型与值的学习笔记为我们提供了对这些基础知识的全面了解,对于Lua新手来说是一份宝贵的资料。通过这些知识点的学习,开发者可以更加有效地编写Lua程序,并在日常开发中避免一些常见错误。
### Lua 5.1 手册笔记概览 本文档主要根据 FinixLei 整理的 Lua 5.1 手册笔记进行提炼与总结,重点在于介绍 Lua 的基本数据类型及其用法。 #### 基本数据类型概述 在 Lua 中,存在多种基本的数据类型,包括 `nil`...
首先,从标题和描述中我们可以看出,这个资料包专门针对Lua学习,反复提及“lua学习资料”,表明其内容可能包括教程、示例代码、练习题等,全面覆盖了学习的各个环节。 在标签中提到了“lua 课程资源”,这可能意味...
【Lua (VC环境) 学习笔记】 Lua是一种轻量级的、开源的脚本语言,主要用于嵌入式系统和游戏开发。它以其简洁的语法、高效性和易于集成的特点受到广泛欢迎。在VC(Visual C++)环境中使用Lua,可以为C++应用程序提供...
Lua的table元表自我学习笔记分享。--lua元表总结 --1、__index的运用 (调用table的一个不存在的索引时,会使用到元表的__index元方法,搜索元表是否也有改索引,__index可以是一个函数也可是一个table。)
这个"lua学习资料集锦"显然包含了丰富的资源,帮助初学者系统地学习和理解Lua语言。以下是一些关于Lua的基本知识点和核心概念: 1. **基本语法**:Lua具有简洁的语法,支持变量声明、流程控制(如if语句、for循环、...
这个"Lua学习框架代码"提供了一个基础的学习平台,帮助初学者更好地理解和掌握Lua编程。下面将详细介绍Lua的一些核心概念和特性,以及如何通过这个框架进行学习。 1. Lua的基础语法: - 变量:Lua中的变量没有类型...
obs-文本-脚本 date-and-time.lua