本来是想研究下lua源码的,但是在看了云风的<<Lua 源码欣赏>>之后,觉得自己的level太低,跟不上楼主的节奏。
无奈又看了下<<The Implementation of Lua 5.0>>,从中吸取了部分营养。
也看了这个网站http://www.zhihu.com/question/20617406
在<<Lua 源码欣赏>>中提到LuaJIT的作者建议了一个lua源码的阅读顺序,首先应熟悉external C API。
https://www.reddit.com/comments/63hth/ask_reddit_which_oss_codebases_out_there_are_so/c02pxbp
lua的源码虽说只有2万多行,但是含量很高,所以没有一定的基础很难拿下,无奈打算从如下书籍开始。
以前学的时候囫囵吞枣,现在又重新的捡起来,这次英文版与以前的中文版一比较,天壤之别,应了那句话:一千个人有一千个哈姆雷特。
这里记录下这本书中的重要内容
chapter1 Getting Started
p5 => 标识符可以是字母,数字,下划线组成的任意字符,但不能以数字开头,建议最好不要以下划线跟大写字母,比如_VERSION,这样的标识符通常是保留的。这在C中很正常,之所以提到这个,是因为在table值的定义中“x"=10这样的key是string,如果是特殊的标识符,只能使用["+"]="add"这样的方式。
p6 => 提到一个很有用的块注释方式,正常的块注释是--[[和]], 但一般使用 --[[和--]],因为这样的注释在想取消注释的时候非常方便,只需在一开始的符号前加一个‘-‘ ,如下
---[[
print(10) --> 10
--]]
后面还提到,如果要注释的内容中已经包括了这样的块注释后怎么办,可以使用--[==[和]==]这样的方式,只要中间的’=‘号个数相同即可,如
--[===[
a = 5
--[[
print(10) --> 10
--]]
--]===]
p8 => 提到在使用如下的命令行方式使用lua时,相应的命令行参数被装载在一个叫arg的环境变量中,如下
》lua -e "sin=math.sin" script a b
则
arg[-3] = "lua"
arg[-2] = "-e"
arg[-1] = "sin=math.sin"
arg[0] = "script"
arg[1] = "a"
arg[2] = "b"
这个特性可以用来打印出调用的文件名,比如
在一个脚本文件中hello.lua中输入print(arg[0]),当通过命令行调用lua "hello.lua”时会打印出文件名称,这在测试中打印出测试的文件名有一定的作用。
chapter 2 Types and Values
p12 => 提到可以使用#取得字符串的长度,后面也提到可以使用#取得连续table的长度。
a = "hello"
print(#a) --> 5
print(a[#a]) -- prints the last value of sequence ‘a‘
a[#a] = nil -- removes this last value
a[#a + 1] = v -- appends ‘v‘ to the end of the list
p13 => 长字符串可使用[[和]],以避免使用转义字符,如下
page = [[
<html>
<head>
<title>An HTML Page</title>
</head>
<body>
<a href="http://www.lua.org">Lua</a>
</body>
</html>
]]
print(page)
若字符串中已包含[[ ]],可使用[==[和]==],只要其中的’=‘个数相同即可。
如
page = [===[
[[
<html>
<head>
<title>An HTML Page</title>
</head>
<body>
<a href="http://www.lua.org">Lua</a>
</body>
</html>
]]
]===]
print(page)
p23 => 条件运算符a?b:c,其实等价于a and b or c。如下
max = (x > y) and x or y
p24 => 字符串连接可使用 .. ,如下
print("Hello " .. "World") --> Hello World
p26 => table的创建
(1)days = {"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"}
等价于
days[1] = "Sunday", days[2] = "Monday",依此类推,下标从1开始。
(2)a = {x=10, y=20} 等价于a = {}; a.x=10; a.y=20也等价于a = {}; a["x"]=10; a["y"]=20
(3)直接使用a = {"x"=10, "y"=20}这样的方式时x,y必须是标识符,如果是特殊符号,需使用如下方式创建表
opnames = {["+"] = "add", ["-"] = "sub",
["*"] = "mul", ["/"] = "div"}
关于table创建p28 exercise 3.7可供练习
What will the following script print? Explain.
sunday = "monday"; monday = "sunday"
t = {sunday = "monday", [sunday] = monday}
print(t.sunday, t[sunday], t[t.sunday])
原文:http://www.cnblogs.com/witxjp/p/4975719.html