登录/注册
下载豆瓣客户端
豆瓣
6.0
全新发布
×
豆瓣
扫码直接下载
iPhone
·
Android
豆瓣
读书
电影
音乐
同城
小组
阅读
FM
时间
豆品
豆瓣读书
搜索:
购书单
电子图书
2023年度榜单
2023年度报告
《LUA程序设计(第2版)》的原文摘录
按热度排序
按页码排序
lua_call 函数完成一次无保护的调用,它类似于 lua_pcall,不过在发生错误时,它会传播错误,而非返回错误代码。在一个应用程序中编写主函数时,不应使用lua_call,因为这样需要捕获所有的错误。而编写C函数时,通常可以用lua_call。若有错误发生,只需将错误留下。 当一个 C 函数从 Lua 收到一个字符串参数时,必须遵守两条规则:不要在访问字符串时从栈中弹出它,不要修改字符串。 当一个 C 函数需要创建一个字符串返回给 Lua 时,C 代码还必须处理字符串缓冲的分配的释放、缓冲溢出等问题。 (
查看原文
)
[已注销]
1赞
2012-05-22 10:39:20
—— 引自第234页
这个函数有点类似于 C 函数 sprintf,但是无须提供这个新字符串的缓冲。Lua 会动态地创建一个足够大的缓冲来存放字符串,确保不会有缓冲溢出等问题。这个函数会将结果字符串压入栈中,并返回一个指向它的指针。当前,这个函数接受的指示符只有:%%(字符%)、%s(字符串)、%d(整数)、%f(Lua 中的数字,即双精度浮点数)以及%c(接受一个整数,并将其格式化为一个字符)。除此之外,它不接受任何例如宽度或精度选项 (
查看原文
)
[已注销]
1赞
2012-05-22 10:39:20
—— 引自第234页
通过这些函数,就无须再关心缓冲的分配、溢出等细节了。此外,这种连接算法也非常高效。 (
查看原文
)
[已注销]
1赞
2012-05-22 10:39:20
—— 引自第234页
在调用setDefault后,任何对tab中存在字段的访问都将调用它的__index元方法,而这个元方法会返回0(这个元方法中d的值). (
查看原文
)
WingStone
3回复
1赞
2012-05-30 22:24:46
—— 引自第120页
After the call to setDefault, any access to an absent eld in tab calls its __index metamethod, which returns zero (the value of d for this metamethod). (
查看原文
)
WingStone
3回复
1赞
2012-05-30 22:24:46
—— 引自第120页
local function iter(a, i) i = i + 1 local v = a[i] if v then return i, v end end function ipairs(a) return iter, a, 0 end </代码结束> (
查看原文
)
松鼠亲自奥利奥
1赞
2013-01-01 21:48:56
—— 引自第55页
在Lua中,函数是一种“第一类值”,它们具有特定的词法域。 第一类值是什么意思呢?就是说在Lua中函数与其他传统类型的值有着相同的权利。函数可以存储到变量中,也可以作为实参传给其他函数,还可以作为函数的返回值。 (
查看原文
)
月出渐分明
2013-01-16 22:01:40
—— 引自第45页
一个函数定义就是一个语句(准确地说是一个赋值语句),这种语句创造了一种类型为函数的值 (
查看原文
)
月出渐分明
2013-01-16 22:01:40
—— 引自第45页
Such constructors can be as large as you need (well, up to a few million ele- ments). (
查看原文
)
Grissiom
2011-05-18 22:59:19
—— 引自第117页
If this format reminds you of BibTeX, it is not a coincidence. BibTeX was one of the inspirations for the constructor syntax in Lua. (
查看原文
)
Grissiom
2011-05-19 20:33:01
—— 引自第127页
if the function has one single argument and that argument is either a literal string or a table constructor, then the parentheses are optional (
查看原文
)
森
3回复
2011-05-20 20:56:43
—— 引自第35页
The constructor {x = 0, y = 0} is equivalent to {["x"] = 0, ["y"] = 0} (
查看原文
)
森
1回复
2011-05-20 21:21:15
—— 引自第24页
有一种常用 Lua 习惯写法 “x=x or v”,它等价于: if not x then x = v end (
查看原文
)
[已注销]
2012-04-06 15:15:09
—— 引自第21页
另外,还有一种习惯写法是 ”(a and b) or c“,这类似于 C 语言中的表达式 a ? b : c, 但是前提是 b 不为假。 例如,为了选出数字 x 和 y 中的较大者,可以使用以下语句: max = (x > y) and x or y (
查看原文
)
[已注销]
2012-04-06 15:15:09
—— 引自第21页
所谓“尾调用”就是类似于 goto 的函数调用。当一个函数调用是另一个函数的最后一个动作时,该调用才算是一条“尾调用” (
查看原文
)
[已注销]
2012-04-07 15:07:44
—— 引自第53页
“一个函数在调用完另一个函数之后,是否就无其他事情需要做了” 有一些看似是“尾调用”的代码,其实都违背了这条准则。 (
查看原文
)
[已注销]
2012-04-07 15:07:44
—— 引自第53页
在 Lua 中,只有 “return <func>(<args>)”这样的调用形式才算是一条“尾调用”。Lua 会在调用前对 <func> 及其参数求值,所以它们可以是任意复杂的表达式。 在 Lua 中“尾调用”的一大应用就是编写“状态机(state machine)”这种程序通常以一个函数来表示一个的状态,改变状态就是 goto (或调用)到另一个特定的函数。 (
查看原文
)
[已注销]
2012-04-07 15:07:44
—— 引自第53页
泛型 for 的语法如下: for <var-list> in <exp-list> do <body> end for 做的第一件事情是对 in 后面的表达式求值。这些表达式应该返回 3 个值供 for 保存:迭代器函数、恒定状态和控制变量的初值。 在初始化步骤之后,for 会以恒定状态和控制变量来调用迭代器函数。然后 for 将迭代器函数的返回值赋予变量列表中的变量。如果第一个返回值为 nil,那么循环终止。 (
查看原文
)
[已注销]
2012-04-09 14:11:46
—— 引自第57页
可以使用一种简单且安全的方法来括住一个字符串,那就是以 "%q" 来使用 string.format 函数。这样它就会用双引号来括住字符串,并且正确地转移其中的双引号和换行符等其他特殊字符。 (
查看原文
)
[已注销]
2012-05-07 14:29:08
—— 引自第108页
元表还可以指定关系操作符的含义,元方法为 __eq(等于)、__lt(小于)和 __le(小于等于)。而其他 3 个关系操作符则没有单独的元方法, Lua 会将 a ~= b 转化为 not (a == b),将 a > b 转化为 b < a,将 a >= b 转化为 b <= a。 (
查看原文
)
[已注销]
2012-05-07 16:05:47
—— 引自第116页
<前页
1
2
后页>
>
我来写笔记
>
LUA程序设计(第2版)
作者:
[巴西] 莱鲁
isbn:
7121061872
书名:
LUA程序设计(第2版)
页数:
281
译者:
周惟迪
定价:
39.00元
出版社:
电子工业出版社
装帧:
平装
出版年:
2008-1