首页 > 其他 > 详细

(一)Lua开篇

时间:2015-11-18 21:25:56      阅读:440      评论:0      收藏:0      [点我收藏+]

本来是想研究下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])


 

(一)Lua开篇

原文:http://www.cnblogs.com/witxjp/p/4975719.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!