﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-长路漫漫-文章分类-lua</title><link>http://www.cppblog.com/learnlov/category/20360.html</link><description>只为记录</description><language>zh-cn</language><lastBuildDate>Sat, 26 Jan 2013 22:29:53 GMT</lastBuildDate><pubDate>Sat, 26 Jan 2013 22:29:53 GMT</pubDate><ttl>60</ttl><item><title>树型打印一个 table</title><link>http://www.cppblog.com/learnlov/articles/197534.html</link><dc:creator>风起浮尘</dc:creator><author>风起浮尘</author><pubDate>Thu, 24 Jan 2013 06:19:00 GMT</pubDate><guid>http://www.cppblog.com/learnlov/articles/197534.html</guid><wfw:comment>http://www.cppblog.com/learnlov/comments/197534.html</wfw:comment><comments>http://www.cppblog.com/learnlov/articles/197534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/learnlov/comments/commentRss/197534.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/learnlov/services/trackbacks/197534.html</trackback:ping><description><![CDATA[转自：<br /><div>http://blog.codingnow.com/cloud/LuaPrintR</div><br /><br /><div>  调试 lua 程序的时候往往想以树的形式打印出一个 table ，下面这个 print_r 函数可以满足要求。</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">local</span><span style="color: #000000; ">&nbsp;print&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;print<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">local</span><span style="color: #000000; ">&nbsp;tconcat&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;table.concat<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">local</span><span style="color: #000000; ">&nbsp;tinsert&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;table.insert<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">local</span><span style="color: #000000; ">&nbsp;srep&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.rep<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">local</span><span style="color: #000000; ">&nbsp;type&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;type<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">local</span><span style="color: #000000; ">&nbsp;pairs&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pairs<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">local</span><span style="color: #000000; ">&nbsp;tostring&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;tostring<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">local</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">next</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">next</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">function</span><span style="color: #000000; ">&nbsp;print_r(root)<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">local</span><span style="color: #000000; ">&nbsp;cache&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{&nbsp;&nbsp;[root]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;}<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">local</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">function</span><span style="color: #000000; ">&nbsp;_dump(t,</span><span style="color: #0000FF; ">space</span><span style="color: #000000; ">,name)<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">local</span><span style="color: #000000; ">&nbsp;temp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{}<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;k,v&nbsp;in&nbsp;pairs(t)&nbsp;</span><span style="color: #0000FF; ">do</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">local</span><span style="color: #000000; ">&nbsp;key&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;tostring(k)<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;cache[v]&nbsp;</span><span style="color: #0000FF; ">then</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tinsert(temp,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;..&nbsp;key&nbsp;..&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;{</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;..&nbsp;cache[v]..</span><span style="color: #000000; ">"</span><span style="color: #000000; ">}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">elseif</span><span style="color: #000000; ">&nbsp;type(v)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">table</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">then</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">local</span><span style="color: #000000; ">&nbsp;new_key&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;name&nbsp;..&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;..&nbsp;key<br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cache[v]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;new_key<br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tinsert(temp,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;..&nbsp;key&nbsp;..&nbsp;_dump(v,</span><span style="color: #0000FF; ">space</span><span style="color: #000000; ">&nbsp;..&nbsp;(</span><span style="color: #0000FF; ">next</span><span style="color: #000000; ">(t,k)&nbsp;</span><span style="color: #0000FF; ">and</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">|</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">or</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;)..&nbsp;srep(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,#key),new_key))<br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tinsert(temp,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;..&nbsp;key&nbsp;..&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;[</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;..&nbsp;tostring(v)..</span><span style="color: #000000; ">"</span><span style="color: #000000; ">]</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">end</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">end</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;tconcat(temp,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">..space)<br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">end</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;print(_dump(root,&nbsp;</span><span style="color: #000000; ">""</span><span style="color: #000000; ">,</span><span style="color: #000000; ">""</span><span style="color: #000000; ">))<br /></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">end</span></div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{}<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">&nbsp;<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">a</span><span style="color: #000000; ">.</span><span style="color: #000000; ">a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{&nbsp;<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;hello&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{&nbsp;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alpha&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">,</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beta&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; ">2</span><span style="color: #000000; ">,</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #000000; ">,</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;world&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foo&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">ooxx</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bar&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">haha</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;a</span><span style="color: #000000; ">,</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #000000; ">,</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">a</span><span style="color: #000000; ">.</span><span style="color: #000000; ">b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{&nbsp;<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;test&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;a</span><span style="color: #000000; ">.</span><span style="color: #000000; ">a&nbsp;<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">a</span><span style="color: #000000; ">.</span><span style="color: #000000; ">c&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;a</span><span style="color: #000000; ">.</span><span style="color: #000000; ">a</span><span style="color: #000000; ">.</span><span style="color: #000000; ">hello<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;<br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">print_r(a)</span></div><div>输出：</div><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #800000; ">+a+hello+alpha&nbsp;[1]<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #800000; ">|&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+beta&nbsp;[2]<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #800000; ">|&nbsp;+world+root&nbsp;</span><span style="color: #000000; ">{</span><span style="color: #FF0000; ">.</span><span style="color: #000000; ">}</span><span style="color: #800000; "><br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #800000; ">|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+bar&nbsp;[haha]<br /></span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #800000; ">|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+foo&nbsp;[ooxx]<br /></span><span style="color: #008080; ">6</span>&nbsp;<span style="color: #800000; ">+c&nbsp;</span><span style="color: #000000; ">{</span><span style="color: #FF0000; ">.a.hello</span><span style="color: #000000; ">}</span><span style="color: #800000; "><br /></span><span style="color: #008080; ">7</span>&nbsp;<span style="color: #800000; ">+b+test&nbsp;</span><span style="color: #000000; ">{</span><span style="color: #FF0000; ">.a</span><span style="color: #000000;">}</span></div><img src ="http://www.cppblog.com/learnlov/aggbug/197534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/learnlov/" target="_blank">风起浮尘</a> 2013-01-24 14:19 <a href="http://www.cppblog.com/learnlov/articles/197534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>lua 参考资料</title><link>http://www.cppblog.com/learnlov/articles/197533.html</link><dc:creator>风起浮尘</dc:creator><author>风起浮尘</author><pubDate>Thu, 24 Jan 2013 06:16:00 GMT</pubDate><guid>http://www.cppblog.com/learnlov/articles/197533.html</guid><wfw:comment>http://www.cppblog.com/learnlov/comments/197533.html</wfw:comment><comments>http://www.cppblog.com/learnlov/articles/197533.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/learnlov/comments/commentRss/197533.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/learnlov/services/trackbacks/197533.html</trackback:ping><description><![CDATA[<div><br />Lua 5.1 参考手册（云风 译） :<div>http://www.codingnow.com/2000/download/lua_manual.html<br /><br /><div>Lua 5.1 Reference Manual ：</div><div>http://www.lua.org/manual/5.1/manual.html</div></div><br /><br /></div><img src ="http://www.cppblog.com/learnlov/aggbug/197533.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/learnlov/" target="_blank">风起浮尘</a> 2013-01-24 14:16 <a href="http://www.cppblog.com/learnlov/articles/197533.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lua脚本语法说明（修订）</title><link>http://www.cppblog.com/learnlov/articles/197532.html</link><dc:creator>风起浮尘</dc:creator><author>风起浮尘</author><pubDate>Thu, 24 Jan 2013 06:11:00 GMT</pubDate><guid>http://www.cppblog.com/learnlov/articles/197532.html</guid><wfw:comment>http://www.cppblog.com/learnlov/comments/197532.html</wfw:comment><comments>http://www.cppblog.com/learnlov/articles/197532.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/learnlov/comments/commentRss/197532.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/learnlov/services/trackbacks/197532.html</trackback:ping><description><![CDATA[转自：<br /><div>http://www.cnblogs.com/ly4cn/archive/2006/08/04/467550.html</div><br /><br /><div>Lua脚本语法说明（增加lua5.1部份特性）<br /><br />　　Lua 的语法比较简单，学习起来也比较省力，但功能却并不弱。<br />　　所以，我只简单的归纳一下Lua的一些语法规则，使用起来方便好查就可以了。估计看完了，就懂得怎么写Lua程序了。<br /><br />　　在Lua中，一切都是变量，除了关键字。<br /><br />I.&nbsp; 首先是注释<br />　　写一个程序，总是少不了注释的。<br />　　在Lua中，你可以使用单行注释和多行注释。<br />　　单行注释中，连续两个减号"--"表示注释的开始，一直延续到行末为止。相当于C++语言中的"//"。<br />　　多行注释中，由"--[["表示注释开始，并且一直延续到"]]"为止。这种注释相当于C语言中的"/*...*/"。在注释当中，"[["和"]]"是可以嵌套的（<span style="color: red;">在lua5.1中，中括号中间是可以加若干个"="号的，如 [==[ ... ]==]</span>），见下面的字符串表示说明。<br /><br />II.&nbsp; Lua编程<br />　　经典的"Hello world"的程序总是被用来开始介绍一种语言。在Lua中，写一个这样的程序很简单：<br />　　print("Hello world")<br />　　在Lua中，语句之间可以用分号"；"隔开，也可以用空白隔开。一般来说，如果多个语句写在同一行的话，建议总是用分号隔开。<br />　　Lua 有好几种程序控制语句，如：<br /> <table style="width: 760px; border-collapse: collapse; height: 124px;" border="1" cellpadding="3" cellspacing="0">     <tbody>         <tr>             <td style="color: red;">控制语句</td>             <td style="color: red;">格式</td>             <td style="color: red;">示例</td>         </tr>         <tr>             <td style="width: 80px;">If</td>             <td style="width: 313px; height: 44px;">if 条件 then ... elseif 条件 then ... else ... end</td>             <td>             <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><span style="color: #0000ff;">if</span>&nbsp;<span style="color: #000000;">1</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">=</span><span style="color: #000000;">2</span>&nbsp;<span style="color: #0000ff;">then</span><span style="color: #000000;">&nbsp;print(</span><span style="color: #000000;">"</span><span style="color: #000000;">true</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br /></span><span style="color: #0000ff;">elseif</span>&nbsp;<span style="color: #000000;">1</span><span style="color: #000000;">+</span><span style="color: #000000;">2</span><span style="color: #000000;">~</span><span style="color: #000000;">=</span><span style="color: #000000;">3</span>&nbsp;<span style="color: #0000ff;">then</span><span style="color: #000000;">&nbsp;print(</span><span style="color: #000000;">"</span><span style="color: #000000;">true</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br /></span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;print(</span><span style="color: #000000;">"</span><span style="color: #000000;">false</span><span style="color: #000000;">"</span><span style="color: #000000;">)&nbsp;</span><span style="color: #0000ff;">end</span></div>             <br /></td>         </tr>         <tr>             <td>While</td>             <td>while 条件 do ... end</td>             <td>             <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><span style="color: #0000ff;">while</span>&nbsp;<span style="color: #000000;">1</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">~</span><span style="color: #000000;">=</span><span style="color: #000000;">2</span>&nbsp;<span style="color: #0000ff;">do</span><span style="color: #000000;">&nbsp;print(</span><span style="color: #000000;">"</span><span style="color: #000000;">true</span><span style="color: #000000;">"</span><span style="color: #000000;">)&nbsp;</span><span style="color: #0000ff;">end</span></div>             <br /></td>         </tr>         <tr>             <td>Repeat</td>             <td>repeat ... until 条件</td>             <td>             <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><span style="color: #000000;"><span style="color: #2000ff;">repeat</span>&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">(</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;">Hello</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000;">)&nbsp;</span><span style="color: #0000ff;">until</span>&nbsp;<span style="color: #800000;">1</span><span style="color: #000000;">+</span><span style="color: #800000;">1</span><span style="color: #000000;">~=</span><span style="color: #800000;">2</span></div>             <br /></td>         </tr>         <tr>             <td>For</td>             <td>for 变量=初值, 终点值, 步进 do&nbsp;... end</td>             <td>             <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">2</span>&nbsp;<span style="color: #0000ff;">do</span><span style="color: #000000;">&nbsp;print(i)&nbsp;</span><span style="color: #0000ff;">end</span></div>             <br /></td>         </tr>         <tr>             <td>For</td>             <td>for 变量1, 变量2, ... 变量n in 表或枚举函数 do ... end</td>             <td>             <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;a,b&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;mylist&nbsp;</span><span style="color: #0000ff;">do</span>&nbsp;<span style="color: #0000ff;">print</span><span style="color: #000000;">(a,&nbsp;b)&nbsp;</span><span style="color: #0000ff;">end</span></div>             <br /></td>         </tr>     </tbody> </table> <br />　　注意一下，for的循环变量总是只作用于for的局部变量；当省略步进值时，for循环会使用1作为步进值。<br />　　使用break可以用来中止一个循环。<br />　　相对C语言来说，Lua有几个地方是明显不同的，所以面要特别注意一下：<br /><br />　　．<strong>语句块</strong><br />　　　　语句块在C中是用"{"和"}"括起来的，在Lua中，它是用do 和 end 括起来的。比如：<br />　　　　do print("Hello") end<br />　　　　可以在 <strong>函数</strong> 中和 <strong>语句块</strong> 中定局部变量。<br /><br />　　．<strong>赋值语句</strong><br />　　　　赋值语句在Lua被强化了。它可以同时给多个变量赋值。<br />　　　　例如：<br />　　　　a,b,c,d=1,2,3,4<br />　　　　甚至是：<br />　　　　a,b=b,a&nbsp; -- 多么方便的交换变量功能啊。<br />　　　　在默认情况下，变量总是认为是全局的。假如需要定义局部变量，则在第一次赋值的时候，需要用local说明。比如：<br />　　　　local a,b,c = 1,2,3&nbsp; -- a,b,c都是局部变量<br /><br />　　．<strong>数值运算</strong><br />　　　　和C语言一样，支持 +, -, *, /。但Lua还多了一个"^"。这表示指数乘方运算。比如2^3 结果为8, 2^4结果为16。<br />　　　　连接两个字符串，可以用".."运处符。如：<br />　　　　"This a " .. "string." -- 等于 "this a string"<br /><br />　　．<strong>比较运算<br /></strong> <table style="width: 543px; border-collapse: collapse; height: 70px;" border="1" cellpadding="3" cellspacing="0">     <tbody>         <tr>             <td style="color: red;">比较符号</td>             <td>&lt;</td>             <td>&gt;</td>             <td>&lt;=</td>             <td>&gt;=</td>             <td>==</td>             <td>~=</td>         </tr>         <tr>             <td style="color: red;">含义</td>             <td>小于</td>             <td>大于</td>             <td>小于或等于</td>             <td>大于或等于</td>             <td>相等</td>             <td>不相等</td>         </tr>     </tbody> </table> <br />　　　　所有这些操作符总是返回true或false。<br />　　　　对于Table，Function和Userdata类型的数据，只有 == 和 ~=可以用。相等表示两个变量引用的是同一个数据。比如：<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">　　　　a</span><span style="color: #808080;">=</span><span style="color: #000000;">{</span><span style="font-weight: bold; color: #800000;">1</span><span style="color: #000000;">,</span><span style="font-weight: bold; color: #800000;">2</span><span style="color: #000000;">}<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　b</span><span style="color: #808080;">=</span><span style="color: #000000;">a<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　</span><span style="color: #0000ff;">print</span><span style="color: #000000;">(a</span><span style="color: #808080;">==</span><span style="color: #000000;">b,&nbsp;a</span><span style="color: #808080;">~=</span><span style="color: #000000;">b)&nbsp;&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">输出&nbsp;true,&nbsp;false</span><span style="color: #008080;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #000000;">　　　　a</span><span style="color: #808080;">=</span><span style="color: #000000;">{</span><span style="font-weight: bold; color: #800000;">1</span><span style="color: #000000;">,</span><span style="font-weight: bold; color: #800000;">2</span><span style="color: #000000;">}<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　b</span><span style="color: #808080;">=</span><span style="color: #000000;">{</span><span style="font-weight: bold; color: #800000;">1</span><span style="color: #000000;">,</span><span style="font-weight: bold; color: #800000;">2</span><span style="color: #000000;">}<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　</span><span style="color: #0000ff;">print</span><span style="color: #000000;">(a</span><span style="color: #808080;">==</span><span style="color: #000000;">b,&nbsp;a</span><span style="color: #808080;">~=</span><span style="color: #000000;">b)&nbsp;&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">输出&nbsp;false,&nbsp;true</span><span style="color: #008080;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span></div> <br /><br />　　．逻辑运算<br />　　　　and, or, not<br />　　　　其中，and 和 or 与C语言区别特别大。<br />　　　　在这里，请先记住，在Lua中，只有false和nil才计算为false，其它任何数据都计算为true，0也是true！<br />　　　　and 和 or的运算结果不是true和false，而是和它的两个操作数相关。<br />　　　　a and b：如果a为false，则返回a；否则返回b<br />　　　　a or b：如果 a 为true，则返回a；否则返回b<br /><br />　　　　举几个例子：<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;<span style="color: #0000ff;">print</span><span style="color: #000000;">(</span><span style="font-weight: bold; color: #800000;">4</span>&nbsp;<span style="color: #808080;">and</span>&nbsp;<span style="font-weight: bold; color: #800000;">5</span><span style="color: #000000;">)&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">输出&nbsp;5</span><span style="color: #008080;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span>&nbsp;<span style="color: #0000ff;">print</span><span style="color: #000000;">(nil&nbsp;</span><span style="color: #808080;">and</span>&nbsp;<span style="font-weight: bold; color: #800000;">13</span><span style="color: #000000;">)&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">输出&nbsp;nil</span><span style="color: #008080;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span>&nbsp;<span style="color: #0000ff;">print</span><span style="color: #000000;">(false&nbsp;</span><span style="color: #808080;">and</span>&nbsp;<span style="font-weight: bold; color: #800000;">13</span><span style="color: #000000;">)&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">输出&nbsp;false</span><span style="color: #008080;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span>&nbsp;<span style="color: #0000ff;">print</span><span style="color: #000000;">(</span><span style="font-weight: bold; color: #800000;">4</span>&nbsp;<span style="color: #808080;">or</span>&nbsp;<span style="font-weight: bold; color: #800000;">5</span><span style="color: #000000;">)&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">输出&nbsp;4</span><span style="color: #008080;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span>&nbsp;<span style="color: #0000ff;">print</span><span style="color: #000000;">(false&nbsp;</span><span style="color: #808080;">or</span>&nbsp;<span style="font-weight: bold; color: #800000;">5</span><span style="color: #000000;">)&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">输出&nbsp;5</span><span style="color: #008080;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span></div> <br />　　　　在Lua中这是很有用的特性，也是比较令人混洧的特性。<br />　　　　我们可以模拟C语言中的语句：x = a? b : c，在Lua中，可以写成：x = a and b or c。<br />　　　　最有用的语句是： x = x or v，它相当于：if not x then x = v end 。<br /><br />　　．运算符优先级，从低到高顺序如下：<br /> <table style="width: 320px; border-collapse: collapse;" border="1" cellpadding="3" cellspacing="0">     <tbody>         <tr>             <td>&nbsp;&nbsp;&nbsp;&nbsp; or<br />&nbsp;&nbsp;&nbsp;&nbsp; and<br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; &lt;=&nbsp;&nbsp;&nbsp; &gt;=&nbsp;&nbsp;&nbsp; ~=&nbsp;&nbsp;&nbsp; ==<br />&nbsp;&nbsp;&nbsp;&nbsp; .. (字符串连接)<br />&nbsp;&nbsp;&nbsp;&nbsp; +&nbsp;&nbsp;&nbsp;&nbsp; -<br />&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp; %<br />&nbsp;&nbsp;&nbsp;&nbsp; not&nbsp;&nbsp; #(<span style="color: red;">lua5.1 取长度运算</span>)&nbsp;&nbsp;&nbsp;&nbsp; - (一元运算)<br />&nbsp;&nbsp;&nbsp;&nbsp; ^</td>         </tr>     </tbody> </table> 和C语言一样，括号可以改变优先级。<br /><br />III.&nbsp; 关键字<br />　　关键字是不能做为变量的。Lua的关键字不多，就以下几个：<br />&nbsp;&nbsp;&nbsp;&nbsp; <table style="width: 426px; border-collapse: collapse; height: 105px;" border="1" cellpadding="3" cellspacing="0">     <tbody>         <tr>             <td>and</td>             <td>break</td>             <td>do</td>             <td>else</td>             <td>elseif</td>             <td><br /></td>         </tr>         <tr>             <td>end</td>             <td>false</td>             <td>for</td>             <td>function</td>             <td>if</td>             <td><br /></td>         </tr>         <tr>             <td>in</td>             <td>local</td>             <td>nil</td>             <td>not</td>             <td>or</td>             <td><br /></td>         </tr>         <tr>             <td>repeat</td>             <td>return</td>             <td>then</td>             <td>true</td>             <td>until</td>             <td>while</td>         </tr>     </tbody> </table> <br />IV.&nbsp; 变量类型<br />　　怎么确定一个变量是什么类型的呢？大家可以用type()函数来检查。Lua支持的类型有以下几种：<br /> <table style="width: 758px; border-collapse: collapse; height: 143px;" border="1" cellpadding="3" cellspacing="0">     <tbody>         <tr>             <td style="width: 74px;">Nil</td>             <td>空值，所有没有使用过的变量，都是nil。nil既是值，又是类型。</td>         </tr>         <tr>             <td>Boolean</td>             <td>布尔值，只有两个有效值：true和false</td>         </tr>         <tr>             <td>Number</td>             <td>数值，在Lua里，数值相当于C语言的double</td>         </tr>         <tr>             <td>String</td>             <td>字符串，如果你愿意的话，字符串是可以包含"\0"字符的（这和C语言总是以"\0"结尾是不一样的）</td>         </tr>         <tr>             <td>Table</td>             <td>关系表类型，这个类型功能比较强大，请参考后面的内容。</td>         </tr>         <tr>             <td>Function</td>             <td>函数类型，不要怀疑，函数也是一种类型，也就是说，所有的函数，它本身就是一个变量。</td>         </tr>         <tr>             <td>Userdata</td>             <td>嗯，这个类型专门用来和Lua的宿主打交道的。宿主通常是用C和C++来编写的，在这种情况下，Userdata可以是宿主的任意数据类型，常用的有Struct和指针。</td>         </tr>         <tr>             <td>Thread</td>             <td><strike><span style="text-decoration: line-through;">线程类型，在Lua中没有真正的线程。Lua中可以将一个函数分成几部份运行。</span></strike>如果感兴趣的话，可以去看看Lua的文档。<br />也跟遍历函数（Iterator函数）有点象。<br />如：<br />             <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;range(n)<br />&nbsp; <span style="color: #2000ff;">local</span> i&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #000000;">0</span><span style="color: #000000;"><br />&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;n)&nbsp;</span><span style="color: #0000ff;">do</span>   <br />&nbsp;&nbsp;&nbsp; coroutine.yield( i )<br /><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">+</span>&nbsp;<span style="color: #000000;">1</span><span style="color: #000000;"><br />&nbsp;&nbsp;</span><span style="color: #0000ff;">end</span><span style="color: #000000;"><br /></span><span style="color: #0000ff;">end</span></div>             要继续运行，需要coroutine.resume函数。<br /></td>         </tr>     </tbody> </table> <br />V.&nbsp; 变量的定义<br />　　所有的语言，都要用到变量。在Lua中，不管在什么地方使用变量，都不需要声明，并且所有的这些变量总是全局变量，除非我们在前面加上"local"。这一点要特别注意，因为我们可能想在函数里使用局部变量，却忘了用local来说明。<br />　　至于变量名字，它是大小写相关的。也就是说，A和a是两个不同的变量。<br />　　定义一个变量的方法就是赋值。"＝"操作就是用来赋值的<br />　　我们一起来定义几种常用类型的变量吧。<br />　　A.&nbsp; Nil<br />　　　　正如前面所说的，没有使用过的变量的值，都是Nil。有时候我们也需要将一个变量清除，这时候，我们可以直接给变量赋以nil值。如：<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">　　　　var1</span><span style="color: #808080;">=</span><span style="color: #000000;">nil&nbsp;&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">&nbsp;请注意&nbsp;nil&nbsp;一定要小写</span></div> <br />　　B.&nbsp; Boolean<br />　　　　布尔值通常是用在进行条件判断的时候。布尔值有两种：true 和  false。在Lua中，只有false和nil才被计算为false，而所有任何其它类型的值，都是true。比如0，空串等等，都是true。不要被  C语言的习惯所误导，0在Lua中的的确确是true。你也可以直接给一个变量赋以Boolean类型的值，如：<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">　　　　theBoolean&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;true</span></div> <br />　　C.&nbsp; Number<br />　　　　在Lua中，是没有整数类型的，也不需要。一般情况下，只要数值不是很大（比如不超过100,000,000,000,000），是不会产生舍入误差的。在WindowsXP能跑的当今主流PC上，实数的运算并不比整数慢。<br />　　　　实数的表示方法，同C语言类似，如：<br />　　　　4 0.4 4.57e-3 0.3e12 5e+20<br /><br />　　D.&nbsp; String<br />　　　　字符串，总是一种非常常用的高级类型。在Lua中，我们可以非常方便的定义很长很长的字符串。<br />　　　　字符串在Lua中有几种方法来表示，最通用的方法，是用双引号或单引号来括起一个字符串的，如：<br />　　　　"That's go!"<br />　　　　或<br />　　　　'Hello world!'<br /><br />　　　　和C语言相同的，它支持一些转义字符，列表如下：<br />　　　　\a&nbsp; bell<br />　　　　\b&nbsp; back space<br />　　　　\f&nbsp; form feed<br />　　　　\n&nbsp; newline<br />　　　　\r&nbsp; carriage return<br />　　　　\t&nbsp; horizontal tab<br />　　　　\v&nbsp; vertical tab<br />　　　　\\&nbsp; backslash<br />　　　　\"&nbsp; double quote<br />　　　　\"&nbsp; single quote<br />　　　　\[&nbsp; left square bracket<br />　　　　\]&nbsp; right square bracket<br /><br />　　　　由于这种字符串只能写在一行中，因此，不可避免的要用到转义字符。加入了转义字符的串，看起来实在是不敢恭维，比如：<br />　　　　"one line\nnext line\n\"in quotes\", "in quotes""<br />　　　　一大堆的"\"符号让人看起来很倒胃口。如果你与我有同感，那么，我们在Lua中，可以用另一种表示方法：用"[["和"]]"将多行的字符串括起来。（<span style="color: red;">lua5.1: 中括号中间可以加入若干个"="号，如 [==[ ... ]==]，详见下面示例</span>）<br />　　　　示例：下面的语句所表示的是完全相同的字符串：<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">a&nbsp;</span><span style="color: #808080;">=</span>&nbsp;<span style="color: #ff0000;">'</span><span style="color: #ff0000;">alo\n123"</span><span style="color: #ff0000;">'</span><span style="color: #000000;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />a&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;<span style="color: red;">"alo\n123\""</span><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />a&nbsp;</span><span style="color: #808080;">=</span>&nbsp;<span style="color: #ff0000;">'</span><span style="color: #ff0000;">\97lo\10\04923"</span><span style="color: #ff0000;">'</span><span style="color: #000000;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />a&nbsp;</span><span style="color: #808080;">=</span>&nbsp;<span style="color: #ff0000;">[</span><span style="color: #ff0000;">[alo<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />123"</span><span style="color: #ff0000;">]</span><span style="color: #000000;">]<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />a&nbsp;</span><span style="color: #808080;">=</span>&nbsp;<span style="color: #ff0000;">[</span><span style="color: #ff0000;">==[<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />alo<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />123"</span><span style="color: #ff0000;">]</span><span style="color: #808080;">==</span><span style="color: #000000;">]</span></div> <br />　　　　值得注意的是，在这种字符串中，如果含有单独使用的"[["或"]]"就仍然得用"\["或"\]"来避免歧义。当然，这种情况是极少会发生的。<br /><br />　　E.&nbsp; Table<br />　 　　　关系表类型，这是一个很强大的类型。我们可以把这个类型看作是一个数组。只是C语言的数组，只能用正整数来作索引；在Lua中，你可以用任意类型来 作数组的索引，除了nil。同样，在C语言中，数组的内容只允许一种类型；在Lua中，你也可以用任意类型的值来作数组的内容，除了nil。<br />　　　　Table的定义很简单，它的主要特征是用"{"和"}"来括起一系列数据元素的。比如：<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">　　　　T1&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;{}&nbsp;&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">&nbsp;定义一个空表</span><span style="color: #008080;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #000000;">　　　　T1</span><span style="color: #ff0000;">[</span><span style="color: #ff0000;">1</span><span style="color: #ff0000;">]</span><span style="color: #808080;">=</span><span style="font-weight: bold; color: #800000;">10</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">&nbsp;然后我们就可以象C语言一样来使用它了。</span><span style="color: #008080;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span></div> <br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">　　　　T1</span><span style="color: #ff0000;">[</span><span style="color: #ff0000;">"John"</span><span style="color: #ff0000;">]</span><span style="color: #808080;">=</span><span style="color: #000000;">{Age</span><span style="color: #808080;">=</span><span style="font-weight: bold; color: #800000;">27</span><span style="color: #000000;">,&nbsp;Gender</span><span style="color: #808080;">=</span><span style="color: #000000;">"Male"}<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　这一句相当于：<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　T1</span><span style="color: #ff0000;">[</span><span style="color: #ff0000;">"John"</span><span style="color: #ff0000;">]</span><span style="color: #808080;">=</span><span style="color: #000000;">{}&nbsp;&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">&nbsp;必须先定义成一个表，还记得未定义的变量是nil类型吗</span><span style="color: #008080;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #000000;">　　　　T1</span><span style="color: #ff0000;">[</span><span style="color: #ff0000;">"John"</span><span style="color: #ff0000;">][</span><span style="color: #ff0000;">"Age"</span><span style="color: #ff0000;">]</span><span style="color: #808080;">=</span><span style="font-weight: bold; color: #800000;">27</span><span style="color: #000000;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　T1</span><span style="color: #ff0000;">[</span><span style="color: #ff0000;">"John"</span><span style="color: #ff0000;">][</span><span style="color: #ff0000;">"Gender"</span><span style="color: #ff0000;">]</span><span style="color: #808080;">=</span><span style="color: #000000;">"Male"<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　当表的索引是字符串的时候，我们可以简写成：<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　T1.John</span><span style="color: #808080;">=</span><span style="color: #000000;">{}<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　T1.John.Age</span><span style="color: #808080;">=</span><span style="font-weight: bold; color: #800000;">27</span><span style="color: #000000;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　T1.John.Gender</span><span style="color: #808080;">=</span><span style="color: #000000;">"Male"<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　或<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　T1.John{Age</span><span style="color: #808080;">=</span><span style="font-weight: bold; color: #800000;">27</span><span style="color: #000000;">,&nbsp;Gender</span><span style="color: #808080;">=</span><span style="color: #000000;">"Male"}</span></div> 这是一个很强的特性。<br /><br />　　　　在定义表的时候，我们可以把所有的数据内容一起写在"{"和"}"之间，这样子是非常方便，而且很好看。比如，前面的T1的定义，我们可以这么写：<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">　　　　T1</span><span style="color: #808080;">=</span><span style="color: #000000;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　{<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　　　</span><span style="font-weight: bold; color: #800000;">10</span><span style="color: #000000;">,&nbsp;&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">&nbsp;相当于&nbsp;[1]&nbsp;=&nbsp;10</span><span style="color: #008080;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #000000;">　　　　　　</span><span style="color: #ff0000;">[</span><span style="color: #ff0000;">100</span><span style="color: #ff0000;">]</span>&nbsp;<span style="color: #808080;">=</span>&nbsp;<span style="font-weight: bold; color: #800000;">40</span><span style="color: #000000;">,<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　　　John</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">&nbsp;如果你原意，你还可以写成：["John"]&nbsp;=</span><span style="color: #008080;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #000000;">　　　　　　{<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　　　　　Age</span><span style="color: #808080;">=</span><span style="font-weight: bold; color: #800000;">27</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">&nbsp;如果你原意，你还可以写成：["Age"]&nbsp;=27</span><span style="color: #008080;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #000000;">　　　　　　　　Gender</span><span style="color: #808080;">=</span><span style="color: #000000;">Male&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">&nbsp;如果你原意，你还可以写成：["Gender"]&nbsp;=Male</span><span style="color: #008080;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #000000;">　　　　　　},<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　　　</span><span style="font-weight: bold; color: #800000;">20</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">&nbsp;相当于&nbsp;[2]&nbsp;=&nbsp;20</span><span style="color: #008080;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #000000;">　　　　}<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span></div> <br />　　　　看起来很漂亮，不是吗？我们在写的时候，需要注意三点：<br />　　　　第一，所有元素之间，总是用逗号"，"隔开；<br />　　　　第二，所有索引值都需要用"["和"]"括起来；如果是字符串，还可以去掉引号和中括号；<br />　　　　第三，如果不写索引，则索引就会被认为是数字，并按顺序自动从1往后编；<br /><br />　　　　表类型的构造是如此的方便，以致于常常被人用来代替配置文件。是的，不用怀疑，它比ini文件要漂亮，并且强大的多。<br /><br />　　F.&nbsp; Function<br />　　　　函数，在Lua中，函数的定义也很简单。典型的定义如下：<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">　　　　</span><span style="color: #0000ff;">function</span>&nbsp;<span style="color: #0000ff;">add</span><span style="color: #000000;">(a,b)&nbsp;&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">&nbsp;add&nbsp;是函数名字，a和b是参数名字</span><span style="color: #008080;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span>&nbsp;<span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a</span><span style="color: #808080;">+</span><span style="color: #000000;">b&nbsp;&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">&nbsp;return&nbsp;用来返回函数的运行结果</span><span style="color: #008080;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #000000;">　　　　</span><span style="color: #0000ff;">end</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span></div> <br />　　　　请注意，return语言一定要写在end之前。假如我们非要在中间放上一句return，那么就应该要写成：do return end。<br />　　　　还记得前面说过，函数也是变量类型吗？上面的函数定义，其实相当于：<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">　　　　</span><span style="color: #0000ff;">add</span>&nbsp;<span style="color: #808080;">=</span>&nbsp;<span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;(a,b)&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a</span><span style="color: #808080;">+</span><span style="color: #000000;">b&nbsp;</span><span style="color: #0000ff;">end</span></div> 当重新给add赋值时，它就不再表示这个函数了。我们甚至可以赋给add任意数据，包括nil （这样，赋值为nil，将会把该变量清除）。Function是不是很象C语言的函数指针呢？<br /><br />　　　　和C语言一样，Lua的函数可以接受可变参数个数，它同样是用"..."来定义的，比如：<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">　　　　</span><span style="color: #0000ff;">function</span>&nbsp;<span style="color: #ff00ff;">sum</span><span style="color: #000000;">&nbsp;(a,b,<img src="http://www.cnblogs.com/Images/dot.gif" alt="" />)</span></div> 如果想取得...所代表的参数，可以在函数中访问arg局部变量（表类型）得到 (<span style="color: red;">lua5.1: 取消arg，并直接用"..."来代表可变参数了，本质还是arg</span>)。<br />　　　　如 sum(1,2,3,4)<br />　　　　则，在函数中，a = 1, b = 2, arg = {3, 4}&nbsp; (<span style="color: red;">lua5.1:&nbsp; a = 1, b = 2, ... = {3, 4}</span>)<br />　　　　更可贵的是，它可以同时返回多个结果，比如：<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">　　　　</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;s()<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　　　</span><span style="color: #0000ff;">return</span>&nbsp;<span style="font-weight: bold; color: #800000;">1</span><span style="color: #000000;">,</span><span style="font-weight: bold; color: #800000;">2</span><span style="color: #000000;">,</span><span style="font-weight: bold; color: #800000;">3</span><span style="color: #000000;">,</span><span style="font-weight: bold; color: #800000;">4</span><span style="color: #000000;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　</span><span style="color: #0000ff;">end</span><span style="color: #000000;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　a,b,c,d&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;s()&nbsp;&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">&nbsp;此时，a&nbsp;=&nbsp;1,&nbsp;b&nbsp;=&nbsp;2,&nbsp;c&nbsp;=&nbsp;3,&nbsp;d&nbsp;=&nbsp;4</span><span style="color: #008080;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span></div> <br />　　　　前面说过，表类型可以拥有任意类型的值，包括函数！因此，有一个很强大的特性是，拥有函数的表，哦，我想更恰当的应该说是对象吧。Lua可以使用面向对象编程了。不信？举例如下：<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">　　　　t&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　{<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　&nbsp;Age&nbsp;</span><span style="color: #808080;">=</span>&nbsp;<span style="font-weight: bold; color: #800000;">27</span><span style="color: #000000;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　&nbsp;</span><span style="color: #0000ff;">add</span>&nbsp;<span style="color: #808080;">=</span>&nbsp;<span style="color: #0000ff;">function</span><span style="color: #000000;">(self,&nbsp;n)&nbsp;self.Age&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;self.Age</span><span style="color: #808080;">+</span><span style="color: #000000;">n&nbsp;</span><span style="color: #0000ff;">end</span><span style="color: #000000;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　}<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　</span><span style="color: #0000ff;">print</span><span style="color: #000000;">(t.Age)&nbsp;&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">&nbsp;27</span><span style="color: #008080;"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #000000;">　　　　t.</span><span style="color: #0000ff;">add</span><span style="color: #000000;">(t,&nbsp;</span><span style="font-weight: bold; color: #800000;">10</span><span style="color: #000000;">)<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />　　　　</span><span style="color: #0000ff;">print</span><span style="color: #000000;">(t.Age)&nbsp;&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">&nbsp;37</span></div> <br />　　　　不过，t.add(t,10) 这一句实在是有点土对吧？没关系，在Lua中，我们可以简写成：<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">　　　　t:</span><span style="color: #0000ff;">add</span><span style="color: #000000;">(</span><span style="font-weight: bold; color: #800000;">10</span><span style="color: #000000;">)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">--</span><span style="color: #008080;">&nbsp;相当于&nbsp;t.add(t,10)</span></div> <br />　　G.&nbsp; Userdata 和 Thread<br />　　　　这两个类型的话题，超出了本文的内容，就不打算细说了。<br /><br />VI.&nbsp; 结束语<br />　　就这么结束了吗？当然不是，接下来，我们需要用Lua解释器，来帮助理解和实践了。相信这样会更快的对Lua上手了。<br />　　就象C语言一样，Lua提供了相当多的标准函数来增强语言的功能。使用这些标准函数，可以很方便的操作各种数据类型，并处理输入输出。有关这方面的信息，我们可以参考《Programming in Lua 》一书，也可以在网络上直接观看电子版，网址为：<a href="http://www.lua.org/pil/index.html">http://www.lua.org/pil/index.html</a><br />　　<br />备注：本文的部份内容摘、译自lua随机文档。<br />相关链接：<br />1. Lua 官方网站： <a href="http://www.lua.org/">http://www.lua.org</a> <br />2. Lua Wiki网站，你可以在这里找到很多相关的资料，如文档、教程、扩展，以及C/C++的包装等： <a href="http://lua-users.org/wiki/">http://lua-users.org/wiki/</a><br />3. Lua 打包下载（包括各种平台和编译器的工程文件如vs2003,vs2005）：http://luabinaries.luaforge.net/download.html</div><img src ="http://www.cppblog.com/learnlov/aggbug/197532.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/learnlov/" target="_blank">风起浮尘</a> 2013-01-24 14:11 <a href="http://www.cppblog.com/learnlov/articles/197532.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>