Lua特别之处笔记
发表于|更新于|topic
|阅读量:
<a href="/2015/02/02/singleton_pattern/" rel="next" title="单例模式的析构问题和线程安全问题">
<i class="fa fa-chevron-left"></i>
<p class="post-nav-pre-next-title">
单例模式的析构问题和线程安全问题
</p>
</a>
</div>
<span class="post-nav-divider"></span>
<div class="post-nav-prev post-nav-item">
<a href="/2015/02/09/条件编译指令之if和ifdef和ifdefined之间的区别/" rel="prev" title="条件编译指令之#if和#ifdef和#if defined之间的区别">
<p class="post-nav-pre-next-title">
条件编译指令之#if和#ifdef和#if defined之间的区别
</p>
<i class="fa fa-chevron-right"></i>
</a>
</div>
</div>
<p>两个取值 false 和 true。但要注意 Lua 中所有的值都可以作为条件。在控制结构的条<br/>件中除了 false 和 nil 为假,其他值都为真。所以 Lua 认为 0 和空串都是真。</p>
2.5 table
我们用一个疑问来引入table的介绍
传的是值还是引用?
lua的函数调用传的是值还是引用?
. . .
测试代码
1 | tTableForTest = {} |
打印结果
tTableForTest[1] : 9
tTableForTest[1] : 11
==================
nNumberForTest : 1
nNumberForTest : 1
==================
nStringForTest : hi
nStringForTest : hi
结论
- table传引用
- number传值
- string传值
为什么lua中table会不一样
在Lua中, table 既不是值也不是变量而是对象.
程序仅持有一个对他们的引用, Lua不会暗中产生table的副本或创建新的table.
事实上, table的创建是通过构造表达式完成的, 最简单的构造表达式就是{}
1 | a = {} |
当一个程序再也没有对一个table的引用时, Lua的垃圾收集器最终会删除该table, 并
复用它的内存.
a[x]和a.x是不同的
a.x
表示a["x"]
, 表示以字符串"x"
来索引table
a[x]
是以变量x的值来索引table
1 | a = {} |
用table作为数组时
就Lua的习惯而言, 数组通常以1作为索引的起始值, 并且还有不少lua机制依赖于这个惯例, 大多数lua内置的函数都假设数组起始于索引1, 这跟c语言以0为起始是不同的.
Lua5.1以上, 可以使用 #
来返回一个数组或者线性表的最后一个索引值或者其大小.
1 | -- 打印所有的行 |
文章作者: 安全书