`
- 浏览:
1309822 次
- 性别:
- 来自:
江苏
-
据某某C++的叛徒说"感觉很多地方 lua 都是鄙视 python 的低效"
囧,python的确很慢.是个脚本都喜欢BS它.
lua虽然也很变态,但好歹没有erlang变态
目前还没有看到类似python中dir , help这种好用的函数.还有就是print虽然有语法糖,但是不够甜
不过因为很小,感觉比python清爽不少,很容易就整合到自己的C++程序中间去了.
感觉用给python写扩展是一件很不爽的事情,也难怪那个自称"世界最強絶対無敵電光石火疾風迅雷資料基盤管理器"的Tokyo Cabinet,有 Perl的官方API,有Ruby的官方API,有Java的官方API,有Lua的官方API,就是没有python的官方Api
lua用来写网络也颇有感觉.
以下是 Programming in Lua 读书摘抄,网上有完美的中文pdf,可以找着去下载
1.
lua的不等于 ~=
2.
Lua 语法要求 break 和 return 只能出现在 block 的结尾一句(也就是说:作为 chunk 的最后一句,或者在 end 之前,或者 else前,或者 until前) ,例如:
local i = 1
while a[i] do
if a[i] == v then break end
i = i + 1
end
有时候为了调试或者其他目的需要在 block的中间使用 return或者break,可以显式的使用 do..end 来实现:
function foo ()
return --<< SYNTAX ERROR
-- 'return' is the last statement in the next block
do return end -- OK
... -- statements not reached
end
3.
Lua函数实参和形参的匹配与赋值语句类似,多余部分被忽略,缺少部分用nil补足。
function f(a, b) return a or b end
CALL PARAMETERS
f(3) a=3, b=nil
f(3, 4) a=3, b=4
f(3, 4, 5) a=3, b=4 (5 is discarded)
4.
function foo0 () end -- returns no results
function foo1 () return 'a' end -- returns 1 result
function foo2 () return 'a','b' end -- returns 2 results
第一,当作为表达式调用函数时,有以下几种情况:
1. 当调用作为表达式最后一个参数或者仅有一个参数时,根据变量个数函数尽可能
多地返回多个值,不足补 nil,超出舍去。
2. 其他情况下,函数调用仅返回第一个值(如果没有返回值为 nil)
x,y = foo2() -- x='a', y='b'
x = foo2() -- x='a', 'b' is discarded
x,y,z = 10,foo2() -- x=10, y='a', z='b'
x,y = foo0() -- x=nil, y=nil
x,y = foo1() -- x='a', y=nil
x,y,z = foo2() -- x='a', y='b', z=nil
x,y = foo2(), 20 -- x='a', y=20
x,y = foo0(), 20, 30 -- x='nil', y=20, 30 is discarded
5.
Lib = {}
function Lib.foo (x,y)
return x + y
end
function Lib.goo (x,y)
return x - y
end
6.
模块内部私有函数
local f = function (...)
...
end
7.
for与迭代器
function list_iter (t)
local i = 0
local n = table.getn(t)
return function ()
i = i + 1
if i <= n then return t[i] end
end
end
t = {10, 20, 30}
for element in list_iter(t) do
print(element)
end
8.
无状态的迭代器是指不保留任何状态的迭代器,因此在循环中我们可以利用无状态迭代器避免创建闭包花费额外的代价。
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
a = {"one", "two", "three"}
for i, v in ipairs(a) do
print(i, v)
end
当 Lua 调用 ipairs(a)开始循环时,他获取三个值:迭代函数 iter、状态常量 a、控制变量初始值 0;
然后 Lua调用 iter(a,0)返回1,a[1] (除非 a[1]=nil);第二次迭代调用 iter(a,1) 返回 2,a[2]……直到第一个非 nil元素。
9.
协同 : 用途 类似生产者 消费者
co = coroutine.create(function ()
print("张沈")
coroutine.yield()
print("鹏")
end)
print(co) --> thread: 0x8071d98
协同有三个状态:
挂起态(suspended)、运行态(running)、停止态(dead)。
当我
创建协同程序成功时,其为挂起态,即此时协同程序并未运行。
我们可用 status 函数检查协同的状态:
print(coroutine.status(co)) --> suspended
函数 coroutine.resume使协同程序由挂起状态变为运行态:
coroutine.resume(co) --> 张沈
coroutine.resume(co) --> 鹏
任务完成,便进入终止态:
print(coroutine.status(co)) --> dead
协同传入参数
co = coroutine.create(function (a,b,c)
print("co", a,b,c)
end)
coroutine.resume(co, 1, 2, 3) --> co 1 2 3
yeild返回参数
co = coroutine.create(function (a,b,c)
print("co", a,b,c)
end)
coroutine.resume(co, 1, 2, 3) --> co 1 2 3
yeild获取参数
co = coroutine.create (function ()
print("co", coroutine.yield())
end)
coroutine.resume(co)
coroutine.resume(co, 4, 5) --> co 4 5
用来写迭代器
function perm (a)
local n = table.getn(a)
return coroutine.wrap(function () permgen(a, n) end)
end
等价于
function perm (a)
local n = table.getn(a)
local co = coroutine.create(function () permgen(a, n) end)
return function () -- iterator
local code, res = coroutine.resume(co)
return res
end
end
10.
阻塞网络
相关文档 http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/tcp.html
require "socket"
function receive (connection)
return connection:receive(2^10)
end
function download (host, file)
local c = assert(socket.connect(host, 80))
local count = 0 -- counts number of bytes read
c:send("GET " .. file .. " HTTP/1.0\r\n\r\n")
while true do
local s, status = receive(c)
if status == "closed" then break end
count = count + string.len(s)
end
c:close()
print(file, count)
end
download("www.baidu.com" , "/" )
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
《Programming in Lua Fourth Edition》是关于Lua编程语言的一本权威指南,由Luiz Henrique de Figueiredo、Ricardo Tomasi和Tiago Fonseca共同撰写。这本书详细介绍了Lua语言的核心概念、语法和特性,是学习和精通...
《Programming in Lua》是一本专为学习和精通Lua编程语言而编写的权威指南。这本书的中文版提供了对Lua语言深入且全面的解析,适合初学者和有经验的程序员使用。Lua是一种轻量级、高性能、易扩展的脚本语言,广泛...
Programming in Lua(4th) 英文无水印pdf 第4版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传...
《Programming in Lua 4th Edition》是一本专为学习和精通Lua编程语言而编写的权威指南。这本书由 Lua 的主要开发者之一,Pedro Melo 执笔,旨在深入浅出地介绍Lua语言的核心概念、语法和应用。第四版是该系列的最新...
Programming in Lua, 3rd.pdfProgramming in Lua, 3rd.pdfProgramming in Lua, 3rd.pdfProgramming in Lua, 3rd.pdf
### Programming In Lua 知识点概览 #### 第一篇 语言 **第0章 序言** - **简述**:介绍了《Programming in Lua》这本书的目的、适用对象以及为何选择Lua作为学习对象等内容。 - **知识点**:了解Lua语言的特点...
《Programming in Lua》第二版是一本介绍Lua编程语言的经典著作,由Roberto Ierusalimschy撰写,是深入了解和学习Lua语言的宝贵资源。Lua是一种轻量级的、高效、易于嵌入的脚本语言,广泛应用于游戏、移动应用、网络...
《Programming in Lua》是关于Lua编程语言的一本权威书籍,由巴西计算机科学家Pietro Trovato撰写。这本书深入浅出地介绍了Lua语言的核心概念、语法特性以及在实际开发中的应用。Lua是一种轻量级、高效且可扩展的...
"Programming in Lua"是一本广泛认可的LUA编程教程,由Pierre Giraud编写,深入浅出地介绍了LUA语言的核心概念和技术。这个压缩包"LUA编程programminginlua.rar"包含了学习LUA编程的重要资源。 打开"Programming in...
《Programming in Lua Second Edition》是关于Lua编程语言的一本经典著作,主要针对的是Lua 5.1版本。这本书深入浅出地介绍了Lua语言的核心概念、语法特性以及在实际开发中的应用,是学习和掌握Lua语言的重要参考...
不多说,学习Lua必备,Roberto Ierusalimschy大作,英文版,mobi格式,供kindle人学习使用。
ProgramminginLua中文版 介绍Lua语法 适用于wow插件开发
LUA编程(programming in lua) 第一版 文字版