﻿<?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++博客-暮暮息幕幕新-随笔分类-6.Lua/XML</title><link>http://www.cppblog.com/singohgod/category/4053.html</link><description>每天晚上入睡，都将迎来崭新的明天，这就是梦想！-大宝天天见</description><language>zh-cn</language><lastBuildDate>Wed, 17 Nov 2010 00:07:56 GMT</lastBuildDate><pubDate>Wed, 17 Nov 2010 00:07:56 GMT</pubDate><ttl>60</ttl><item><title>[摘录]rapidxml,一个快速的xml库</title><link>http://www.cppblog.com/singohgod/archive/2010/11/15/133685.html</link><dc:creator>大宝天天见</dc:creator><author>大宝天天见</author><pubDate>Mon, 15 Nov 2010 09:24:00 GMT</pubDate><guid>http://www.cppblog.com/singohgod/archive/2010/11/15/133685.html</guid><wfw:comment>http://www.cppblog.com/singohgod/comments/133685.html</wfw:comment><comments>http://www.cppblog.com/singohgod/archive/2010/11/15/133685.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/singohgod/comments/commentRss/133685.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/singohgod/services/trackbacks/133685.html</trackback:ping><description><![CDATA[近来找到一个快速的xml库,试用了一下,方法和现在使用的tinyxml差不多,很容易上手,如果有机会可以移植到项目里面试试<br><br>自从用了xml后对他是又爱又恨,他的确能代替配置文件,但是当文件容量大到一定量的时候灾难就降临了,比如读取一个50M的xml文件,往往读取花上10秒,解析再花上20秒,还要占用大量内存空间,十分头痛.所以实际项目中都会将xml再转为二进制文件来处理,但是xml的灵活性的确很方便,如果rapidxml能接近二进制的速度,当然就太好啦,还没有测试过,下面是一些介绍.<br><br>貌似tinyxml会遇到unicode障碍,rapidxml不会,如果项目要做多语言版本就必须面临解决这个问题...<br><br>
<hr>
<br>rapidxml是一个快速的xml库，官方网站： <a href="http://rapidxml.sourceforge.net/">http://rapidxml.sourceforge.net/</a>，根据manual看到，他竟然比tinyxml快了50-100倍<br><br>
<hr>
<p>目前我公司开发的Nexus Engine的底层对象序列化使用了TinyXML来读写XML文件。TinyXML有两个不爽的地方，一是它的接口使用FILE*，另外一个是它对 wchar_t不能很好的支持。前阵子看Boost库的更新中多了一个PropertyTree，他在处理XML时用到了另外一个小的库 &#8211;RapidXML。既然间接的是Boost库的一部分，所以是值得一试的。于是找到其官方网站（<a title=http://rapidxml.sourceforge.net/ href="http://rapidxml.sourceforge.net/" target=_blank><font color=#5c7a99>http://rapidxml.sourceforge.net/</font></a>）研究了一番。一看之下，甚是满意，也推荐给大家看看！</p>
<p>首先就是速度，据它自己宣称比TinyXML快30到60倍，比Xerces DOM快50到100倍！详细的测试比较请见其用户手册（<a title=http://rapidxml.sourceforge.net/manual.html href="http://rapidxml.sourceforge.net/manual.html" target=_blank><font color=#5c7a99>http://rapidxml.sourceforge.net/manual.html</font></a>）的&#8220;4. Performance &#8221;一节。</p>
<p>其次它的设计非常的简洁，只依赖于标准库中的几个基本的类。它的输入输出都是字符串，这样很好，一个库就应该关注自己核心的内容，做尽量少的事情。它的API其实和TinyXML倒是有几分相似，用过TinyXML的人应该很容易上手：</p>
<p>TinyXML主要接口类 &nbsp;&nbsp; &nbsp;RapidXML的主要接口类</p>
<table cellSpacing=1 cellPadding=2 width=543 border=1>
    <tbody>
        <tr>
            <td vAlign=top width=300><strong>TinyXML主要接口类</strong></td>
            <td vAlign=top width=238><strong>RapidXML的主要接口类</strong></td>
        </tr>
        <tr>
            <td width=300>class TiXmlDocument</td>
            <td vAlign=top width=238>template&lt;class Ch = char&gt;<br>class xml_document</td>
        </tr>
        <tr>
            <td vAlign=top width=300>class TiXmlNode</td>
            <td vAlign=top width=238>template&lt;class Ch = char&gt;<br>class xml_node</td>
        </tr>
        <tr>
            <td vAlign=top width=300>class TiXmlAttribute</td>
            <td vAlign=top width=238>template&lt;class Ch = char&gt;<br>class xml_attribute</td>
        </tr>
    </tbody>
</table>
<p>下面还是看一个具体的例子来体验一下，下面是TinyXML官方教程中创建XML文档的一段代码：</p>
<blockquote>
<p>void build_simple_doc( )<br>{<br>// Make xml: &lt;?xml ..&gt;&lt;Hello&gt;World&lt;/Hello&gt;<br>TiXmlDocument doc;<br>TiXmlDeclaration * decl = new TiXmlDeclaration( &#8220;1.0&#8243;, &#8220;&#8221;, &#8220;&#8221; );<br>TiXmlElement * element = new TiXmlElement( &#8220;Hello&#8221; );<br>TiXmlText * text = new TiXmlText( &#8220;World&#8221; );<br>element-&gt;LinkEndChild( text );<br>doc.LinkEndChild( decl );<br>doc.LinkEndChild( element );<br>doc.SaveFile( &#8220;madeByHand.xml&#8221; );<br>}</p>
</blockquote>
<p>下面是使用RapidXML实现类似功能的代码：</p>
<blockquote>
<p>void build_simple_doc_by_rapidxml()<br>{<br>xml_document&lt;&gt; doc;<br>xml_node&lt;&gt;* decl = doc.allocate_node(node_declaration);<br>xml_attribute&lt;&gt;* decl_ver =<br>doc.allocate_attribute(&#8220;version&#8221;, &#8220;1.0&#8243;);<br>decl-&gt;append_attribute(decl_ver);<br>doc.append_node(decl);</p>
<p>xml_node&lt;&gt;* node =<br>doc.allocate_node(node_element,&nbsp;&nbsp;&nbsp; &#8220;Hello&#8221;, &#8220;World&#8221;);<br>doc.append_node(node);</p>
<p>string text;<br>rapidxml::print(std::back_inserter(text), doc, 0);</p>
<p>// write text to file by yourself<br>}</p>
</blockquote>
<p>下面是使用RapidXML分析XML的样例代码：</p>
<blockquote>
<p>void parse_doc_by_rapidxml(char* xml_doc)<br>{<br>xml_document&lt;&gt; doc;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // character type defaults to char<br>doc.parse&lt;0&gt;(xml_doc);&nbsp; // 0 means default parse flags</p>
<p>xml_node&lt;&gt; *node = doc.first_node(&#8220;Hello&#8221;);<br>string node_val = node-&gt;value();<br>}</p>
</blockquote><br>
<hr>
<p>前两天有朋友问，我的<a href="http://multi-crash.com/?page_id=161" target=_blank><span style="COLOR: #0000ff">SlimXml</span></a>有没有和<a href="http://rapidxml.sourceforge.net/" target=_blank><span style="COLOR: #0000ff">RapidXml</span></a>对比过效率？我是第一次听说这个库，更不用说对比效率了，于是上他们网站看了下。</p>
<p>好家伙，居然号称比<a href="http://sourceforge.net/projects/tinyxml/" target=_blank><span style="COLOR: #0000ff">TinyXml</span></a>快30～60倍，而且是<a href="http://boost.org/"><span style="COLOR: #0000ff">Boost.PropertyTree</span></a>的默认xml解析器。</p>
<p>于是有点好奇，因为以前也没有特别关心过SlimXml的效率。</p>
<p>于是分别下载了TinyXml-2.6.1和RapidXml-1.13，迅速用vc8建立了两个测试工程，在系统中搜&#8221;*.xml&#8221;，找到了一个比较合适的测试文件。它足够大（1.5M），utf-8编码并且包含中/英文，有一定层次深度，大约3.3万行。测试文件可以<a href="http://multi-crash.com/download/test.zip" target=_blank><span style="COLOR: #0000ff">从这里下载</span></a></p>
<p>测试对象是三个库从内存字符串解析xml的函数，这样能排除从硬盘上读文件这种不稳定因素的干扰，而且RapidXml貌似只支持从内存里解析</p>
<ul>
    <li>slim::XmlDocument::loadFromMemory()
    <li>TiXmlDocument::Parse()
    <li>rapidxml::xml_document&lt;char&gt;::parse&lt;flag&gt;() </li>
</ul>
<p>要说明的是，RapidXml的这个parse是一个模板函数，必须给一个flag的参数，我测试的时候给的是默认的0</p>
<p>测试结果，解析这个3.3万行，1.5M大小的xml，三个库分别花了</p>
<ul>
    <li>SlimXml: 22ms
    <li>TinyXml: 54ms
    <li>RapidXml: 4ms! </li>
</ul>
<p>结论是，RapidXml果然很强悍，居然比我的SlimXml快5倍多。但是并没有如作者所说比TinyXml快30~60倍，只有不到15倍。据说对比用的是一个约50k大小的xml文件，可惜并没有提供下载，不然可以验证一下。</p>
<p>比较欣慰的是，在我并没有很关注效率的情况下，SlimXml仍然比TinyXml快2.5倍。SlimXml走的是简单小巧路线，源代码只有32k，而TinyXml和RapidXml的源码分别是147k和141k，有这样的效率可以满意了。在我有很多空闲以前，估计我也不会再去优化它，因为这个库主要还是针对几十上百行的小文件，解析特别大的xml不在我考虑的范围之内。</p>
<p>以下是RapidXml提供的常见xml库效率对照表，其中还很牛鼻地提供了和strlen()函数的效率对比</p>
<p><a href="http://multi-crash.com/blog/wp-content/uploads/2010/07/xml.png"><img class="alignnone size-full wp-image-279" title=xml height=275 src="http://hiphotos.baidu.com/5iprog/pic/item/1878fd197c684c4235fa4182.jpg" width=582></a></p>
<p>我估计RapidXml速度快的主要原因是对memory pool的使用，毕竟在解析过程中需要创建大量的string，可以想象用memory pool和直接走默认的new很容易产生超过一个数量级的效率差异。</p>
<br>
<hr>
<br><br><br><br><br><br>
<img src ="http://www.cppblog.com/singohgod/aggbug/133685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/singohgod/" target="_blank">大宝天天见</a> 2010-11-15 17:24 <a href="http://www.cppblog.com/singohgod/archive/2010/11/15/133685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]介绍LuaPlus: 好用的Lua For C++扩展(修订)</title><link>http://www.cppblog.com/singohgod/archive/2010/11/15/133678.html</link><dc:creator>大宝天天见</dc:creator><author>大宝天天见</author><pubDate>Mon, 15 Nov 2010 09:11:00 GMT</pubDate><guid>http://www.cppblog.com/singohgod/archive/2010/11/15/133678.html</guid><wfw:comment>http://www.cppblog.com/singohgod/comments/133678.html</wfw:comment><comments>http://www.cppblog.com/singohgod/archive/2010/11/15/133678.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/singohgod/comments/commentRss/133678.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/singohgod/services/trackbacks/133678.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 打算把lua作为项目的脚本语言,下面是不不错的教程,收藏虽然很早前研究过Lua,但还没有在放到项目中进行检验,要亲自用过才知道好坏~LuaPlus是Lua的C++增强，也就是说，LuaPlus本身就是在Lua的源码上进行增强得来的。用它与C++进行合作，是比较好的一个选择。LuaPlus目前版本为：LuaPlus for Lua 5.01 Distribution Build 1080 (Febr...&nbsp;&nbsp;<a href='http://www.cppblog.com/singohgod/archive/2010/11/15/133678.html'>阅读全文</a><img src ="http://www.cppblog.com/singohgod/aggbug/133678.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/singohgod/" target="_blank">大宝天天见</a> 2010-11-15 17:11 <a href="http://www.cppblog.com/singohgod/archive/2010/11/15/133678.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]Lua脚本语法说明(修订)</title><link>http://www.cppblog.com/singohgod/archive/2010/11/15/133676.html</link><dc:creator>大宝天天见</dc:creator><author>大宝天天见</author><pubDate>Mon, 15 Nov 2010 09:05:00 GMT</pubDate><guid>http://www.cppblog.com/singohgod/archive/2010/11/15/133676.html</guid><wfw:comment>http://www.cppblog.com/singohgod/comments/133676.html</wfw:comment><comments>http://www.cppblog.com/singohgod/archive/2010/11/15/133676.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/singohgod/comments/commentRss/133676.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/singohgod/services/trackbacks/133676.html</trackback:ping><description><![CDATA[这么好的教程一定要收藏一份~<br><br>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" cellSpacing=0 cellPadding=3 border=1>
    <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-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;</span><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><span style="COLOR: #000000">&nbsp;</span><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><span style="COLOR: #000000">&nbsp;</span><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><span style="COLOR: #000000">&nbsp;</span><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-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;</span><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><span style="COLOR: #000000">&nbsp;</span><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-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><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="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="FONT-WEIGHT: bold; COLOR: #000000">Hello</span><span style="FONT-WEIGHT: bold; COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">until</span><span style="COLOR: #000000">&nbsp;</span><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-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><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><span style="COLOR: #000000">&nbsp;</span><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-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><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><span style="COLOR: #000000">&nbsp;</span><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" cellSpacing=0 cellPadding=3 border=1>
    <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-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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" 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" 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" 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" 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" 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" 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-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">　　　　&nbsp;</span><span style="COLOR: #0000ff">print</span><span style="COLOR: #000000">(</span><span style="FONT-WEIGHT: bold; COLOR: #800000">4</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #808080">and</span><span style="COLOR: #000000">&nbsp;</span><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" align=top></span><span style="COLOR: #000000">　　　　&nbsp;</span><span style="COLOR: #0000ff">print</span><span style="COLOR: #000000">(nil&nbsp;</span><span style="COLOR: #808080">and</span><span style="COLOR: #000000">&nbsp;</span><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" align=top></span><span style="COLOR: #000000">　　　　&nbsp;</span><span style="COLOR: #0000ff">print</span><span style="COLOR: #000000">(false&nbsp;</span><span style="COLOR: #808080">and</span><span style="COLOR: #000000">&nbsp;</span><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" align=top></span><span style="COLOR: #000000">　　　　&nbsp;</span><span style="COLOR: #0000ff">print</span><span style="COLOR: #000000">(</span><span style="FONT-WEIGHT: bold; COLOR: #800000">4</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #808080">or</span><span style="COLOR: #000000">&nbsp;</span><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" align=top></span><span style="COLOR: #000000">　　　　&nbsp;</span><span style="COLOR: #0000ff">print</span><span style="COLOR: #000000">(false&nbsp;</span><span style="COLOR: #808080">or</span><span style="COLOR: #000000">&nbsp;</span><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" 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" cellSpacing=0 cellPadding=3 border=1>
    <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" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td>and</td>
            <td>break</td>
            <td>do</td>
            <td>else</td>
            <td>elseif</td>
            <td></td>
        </tr>
        <tr>
            <td>end</td>
            <td>false</td>
            <td>for</td>
            <td>function</td>
            <td>if</td>
            <td></td>
        </tr>
        <tr>
            <td>in</td>
            <td>local</td>
            <td>nil</td>
            <td>not</td>
            <td>or</td>
            <td></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" cellSpacing=0 cellPadding=3 border=1>
    <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><span style="TEXT-DECORATION: line-through">线程类型，在Lua中没有真正的线程。Lua中可以将一个函数分成几部份运行。</span>如果感兴趣的话，可以去看看Lua的文档。<br>现在回过头来看看，倒觉得不是线程类型。反而象是用来做遍历的，象是Iterator函数。<br>如：<br>
            <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><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><span style="COLOR: #000000">&nbsp;</span><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><span style="COLOR: #000000"></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><span style="COLOR: #000000">&nbsp;</span><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-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">a&nbsp;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&nbsp;</span><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" 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" align=top>a&nbsp;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&nbsp;</span><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" align=top>a&nbsp;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #ff0000">[</span><span style="COLOR: #ff0000">[alo<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>123"</span><span style="COLOR: #ff0000">]</span><span style="COLOR: #000000">]<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>a&nbsp;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #ff0000">[</span><span style="COLOR: #ff0000">==[<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>alo<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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" 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" align=top></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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" align=top>　　　　这一句相当于：<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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" 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" 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" align=top>　　　　当表的索引是字符串的时候，我们可以简写成：<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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" 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" 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" align=top>　　　　或<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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" align=top>　　　　{<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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" align=top></span><span style="COLOR: #000000">　　　　　　</span><span style="COLOR: #ff0000">[</span><span style="COLOR: #ff0000">100</span><span style="COLOR: #ff0000">]</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: #800000">40</span><span style="COLOR: #000000">,<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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" align=top></span><span style="COLOR: #000000">　　　　　　{<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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" 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" align=top></span><span style="COLOR: #000000">　　　　　　},<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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" align=top></span><span style="COLOR: #000000">　　　　}<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>　　　　看起来很漂亮，不是吗？我们在写的时候，需要注意三点：<br>　　　　第一，所有元素之间，总是用逗号"，"隔开；<br>　　　　第二，所有索引值都需要用"["和"]"括起来；如果是字符串，还可以去掉引号和中括号；<br>　　　　第三，如果不写索引，则索引就会被认为是数字，并按顺序自动从1往后编；<br><br>　　　　表类型的构造是如此的方便，以致于常常被人用来代替配置文件。是的，不用怀疑，它比ini文件要漂亮，并且强大的多。<br><br>　　F.&nbsp; Function<br>　　　　函数，在Lua中，函数的定义也很简单。典型的定义如下：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">　　　　</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;</span><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" align=top></span><span style="COLOR: #000000">　　　　&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;&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" 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" align=top></span></div>
<br>　　　　请注意，return语言一定要写在end之前。假如我们非要在中间放上一句return，那么就应该要写成：do return end。<br>　　　　还记得前面说过，函数也是变量类型吗？上面的函数定义，其实相当于：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">　　　　</span><span style="COLOR: #0000ff">add</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&nbsp;</span><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-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">　　　　</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #ff00ff">sum</span><span style="COLOR: #000000">&nbsp;(a,b,<img src="http://www.cnblogs.com/Images/dot.gif">)</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-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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" align=top>　　　　　　</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</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">,</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" align=top>　　　　</span><span style="COLOR: #0000ff">end</span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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" align=top></span></div>
<br>　　　　前面说过，表类型可以拥有任意类型的值，包括函数！因此，有一个很强大的特性是，拥有函数的表，哦，我想更恰当的应该说是对象吧。Lua可以使用面向对象编程了。不信？举例如下：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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" align=top>　　　　{<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>　　　　&nbsp;Age&nbsp;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&nbsp;</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" align=top>　　　　&nbsp;</span><span style="COLOR: #0000ff">add</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&nbsp;</span><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" align=top>　　　　}<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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" 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" 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-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" 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"><u><font color=#0000ff>http://www.lua.org/pil/index.html</font></u></a><br>　　<br>备注：本文的部份内容摘、译自lua随机文档。<br>相关链接：<br>1. Lua 官方网站： <a href="http://www.lua.org/"><u><font color=#0000ff>http://www.lua.org</font></u></a> <br>2. Lua Wiki网站，你可以在这里找到很多相关的资料，如文档、教程、扩展，以及C/C++的包装等： <a href="http://lua-users.org/wiki/"><u><font color=#0000ff>http://lua-users.org/wiki/</font></u></a><br>3. Lua 打包下载（包括各种平台和编译器的工程文件如vs2003,vs2005）：http://luabinaries.luaforge.net/download.html<br><br>这是我编译好的Lua5.02的解释器：<a href="http://files.cnblogs.com/ly4cn/lua.zip"><u><font color=#0000ff>http://files.cnblogs.com/ly4cn/lua.zip</font></u></a> <script type=text/javascript>
if ($ != jQuery) {
$ = jQuery.noConflict();
}
</script>
<img src ="http://www.cppblog.com/singohgod/aggbug/133676.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/singohgod/" target="_blank">大宝天天见</a> 2010-11-15 17:05 <a href="http://www.cppblog.com/singohgod/archive/2010/11/15/133676.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]LuaPlus上手指南(1)</title><link>http://www.cppblog.com/singohgod/archive/2007/04/16/22069.html</link><dc:creator>大宝天天见</dc:creator><author>大宝天天见</author><pubDate>Mon, 16 Apr 2007 15:22:00 GMT</pubDate><guid>http://www.cppblog.com/singohgod/archive/2007/04/16/22069.html</guid><wfw:comment>http://www.cppblog.com/singohgod/comments/22069.html</wfw:comment><comments>http://www.cppblog.com/singohgod/archive/2007/04/16/22069.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cppblog.com/singohgod/comments/commentRss/22069.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/singohgod/services/trackbacks/22069.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-no-proof: yes">LuaPlus</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-no-proof: yes">上手指南<span lang=EN-US>(1)<o:p></o:p></span></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-FAMILY: 宋体; mso-no-proof: yes; mso-bidi-font-size: 10.5pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-FAMILY: 宋体; mso-no-proof: yes; mso-bidi-font-size: 10.5pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-no-proof: yes">版权所有<span lang=EN-US>,</span>转载请注明出处<span lang=EN-US>,</span>勿用于商业用途<span lang=EN-US>,</span>谢谢<span lang=EN-US>!<o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-no-proof: yes">作者<span lang=EN-US>:<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span>大宝天天见<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-no-proof: yes">Blog:<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><a href="http://www.cppblog.com/singohgod"><u><font color=#800080>http://www.cppblog.com/singohgod</font></u></a><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-no-proof: yes">本人水平有限<span lang=EN-US>,</span>有错请指出<span lang=EN-US>,</span>欢迎交流<span lang=EN-US>,</span>共同进步<span lang=EN-US>!<br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-FAMILY: 宋体; mso-no-proof: yes; mso-bidi-font-size: 10.5pt"><o:p><img height=120 src="http://www.cppblog.com/images/cppblog_com/singohgod/4054/t_Lua_LOGO.jpg" width=119 border=0>&nbsp;<img height=120 src="http://www.cppblog.com/images/cppblog_com/singohgod/4054/t_LuaPlus_LOGO.jpg" width=120 border=0><br></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">国内关于</span><span lang=EN-US>Lua</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的资料实在是太少</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为了寻找一个合适的</span><span lang=EN-US>Lua</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang=EN-US>C++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">封装</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">真是如同大海捞针</span><span lang=EN-US>.</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在看了众多资料后锁定以下几种</span><span lang=EN-US>:LuaBind ToLua++ LuaPlus.</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在选择上颇有讽刺的味道</span><span lang=EN-US>,LuaBind</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的版本号还没到</span><span lang=EN-US>1.0,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">加上网友颇有微词</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">放弃</span><span lang=EN-US>.ToLua++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本来有朋友推荐</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">但是怎么都找不到下载</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">官网就是打不开</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">无赖放弃</span><span lang=EN-US>.</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就只有</span><span lang=EN-US>LuaPlus</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">了</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">看到一些人的评价还行</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">于是决定就用它吧</span><span lang=EN-US>.</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><span lang=EN-US>LuaPlus</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的资料就更少了</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">连怎么配置怎么调试等什么都没有</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">只有沐枫大哥讲解了语法方面的一篇文章</span><span lang=EN-US>.</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">啊哟</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">怎么搞呢</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">难道又只有硬着头皮上了</span><span lang=EN-US>?(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">某伟人曾说过</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">但凡杰出的事都是硬着头皮干出来滴</span><span lang=EN-US>)</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">好了</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">言归正传</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下面讲讲我的经验吧</span><span lang=EN-US>:</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如何编译</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 14pt; COLOR: red"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: maroon; mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong style="mso-bidi-font-weight: normal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下载</span><span lang=EN-US style="COLOR: maroon"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">首先到官方网站下载</span><span lang=EN-US>: <a href="http://www.luaplus.org/"><u><font color=#0000ff>http://www.luaplus.org/</font></u></a></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下载这个</span><span lang=EN-US>: All source code: <a href="http://luaplus.org/LuaPlus51_Build1100.zip"><u><font color=#0000ff>http://luaplus.org/LuaPlus51_Build1100.zip</font></u></a> (</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我当前的版本</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当然越新越好</span><span lang=EN-US>)</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: maroon; mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong style="mso-bidi-font-weight: normal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">剥离</span><span lang=EN-US style="COLOR: maroon"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解开下载包</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">打开</span> <span lang=EN-US>\LuaPlus51_Build1100\Src\LuaPlus </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里面是全部源文件</span><span lang=EN-US>,src</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下是</span><span lang=EN-US>lua</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的源文件</span><span lang=EN-US>.</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这里有个令人疑惑的地方</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">源文件中带了一些不需要的文件</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要剔除去</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">基本上需要以下这些文件</span><span lang=EN-US>:</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level2 lfo1; tab-stops: list 39.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1)<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang=EN-US>Lua</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">库文件</span><span lang=EN-US>:</span></p>
<p>
<table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 142pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" vAlign=top width=189>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lapi.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lapi.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lauxlib.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lauxlib.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lbaselib.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lcode.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lcode.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>ldblib.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>ldebug.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>ldebug.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>ldo.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>ldo.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>ldump.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lfunc.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lfunc.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lgc.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lgc.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>linit.c</span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 142.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=189>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>liolib.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>llex.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>llex.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>llimits.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lmathlib.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lmem.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lmem.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>loadlib.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lobject.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lobject.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lopcodes.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lopcodes.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>loslib.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lparser.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lparser.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lstate.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lstate.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lstring.c</span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 142.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=189>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lstring.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lstrlib.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>ltable.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>ltable.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>ltablib.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>ltm.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>ltm.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lua.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>luaconf.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lualib.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lundump.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lundump.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lvm.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lvm.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lzio.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lzio.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>print.c</span></p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level2 lfo1; tab-stops: list 39.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2)<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang=EN-US>LuaPlus</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">头文件</span><span lang=EN-US>:</span></p>
<p>
<table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" vAlign=top width=284>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>auxiliar.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaAutoBlock.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaCall.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaFunction.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaHelper.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaHelper_Object.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaHelper_StackObject.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaLink.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaObject.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaObject.inl</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaPlus.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaPlusCD.h</span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=284>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaPlusFunctions.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaPlusInternal.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaStackObject.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaStackObject.inl</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaStackTableIterator.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaState.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaState.inl</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaStateOutFile.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaTableIterator.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>luathread.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>pt.h</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>srm.h</span></p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level2 lfo1; tab-stops: list 39.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">3)<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang=EN-US>LuaPlus</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">源文件</span></p>
<p>
<table class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" vAlign=top width=284>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaCall.cpp</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaObject.cpp</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaPlus.cpp</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaPlusAddons.c</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaPlusFunctions.cpp</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaPlus_Libs.cpp</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaStackObject.cpp</span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=284>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaStackTableIterator.cpp</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaState.cpp</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaStateOutFile.cpp</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaState_DumpObject.cpp</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>LuaTableIterator.cpp</span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US>lwstrlib.c</span></p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: maroon; mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">3.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong style="mso-bidi-font-weight: normal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">建立项目</span><span lang=EN-US style="COLOR: maroon"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后你就可以在</span><span lang=EN-US>VS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中建立一个新项目</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">静态链接库的</span><span lang=EN-US>:</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><v:shapetype id=_x0000_t75 coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"><img src="http://www.cppblog.com/images/cppblog_com/singohgod/4054/o_1.jpg" border=0></o:lock></v:shapetype></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">分别把需要的文件加进去</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之后编译</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应该能通过了</span><span lang=EN-US>.</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如何使用</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 14pt; COLOR: red"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接着讲讲如何在你的其他项目中使用</span><span lang=EN-US>LuaPlus.</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: maroon">1.</span></strong><strong style="mso-bidi-font-weight: normal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">必要的配置</span><span lang=EN-US style="COLOR: maroon"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你的项目可能是这样的</span><span lang=EN-US>:</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><img src="http://www.cppblog.com/images/cppblog_com/singohgod/4054/o_2.jpg" border=0></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设置</span><span lang=EN-US>GameClient</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的依赖项是</span><span lang=EN-US>LuaPlusLib</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue">#include "LuaPlus.h"<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue">using namespace LuaPlus;<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">记得干这事</span><span lang=EN-US>&#8230;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: maroon">2.</span></strong><strong style="mso-bidi-font-weight: normal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">创建一个状态</span><span lang=EN-US style="COLOR: maroon"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue">LuaStateOwner state;<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">今后的操作都围绕这个</span><span lang=EN-US>state</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: maroon">3.</span></strong><strong style="mso-bidi-font-weight: normal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">执行脚本</span><span lang=EN-US style="COLOR: maroon"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue">int iret = state-&gt;DoFile("test.lua");<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">返回值为</span><span lang=EN-US>0</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示成功</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">否则不成功</span><span lang=EN-US>.</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: maroon">4.C++</span></strong><strong style="mso-bidi-font-weight: normal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中获取</span><span lang=EN-US style="COLOR: maroon">Lua</span></strong><strong style="mso-bidi-font-weight: normal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">脚本的变量</span><span lang=EN-US style="COLOR: maroon"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">假设你的</span><span lang=EN-US>test.lua</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中有</span><span lang=EN-US>: </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>health = 200;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过下列方法就可以在</span><span lang=EN-US>C++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中得到这个数值</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue">int mytest = state-&gt;GetGlobal("health").GetInteger();<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: maroon">5.C++</span></strong><strong style="mso-bidi-font-weight: normal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中调用</span><span lang=EN-US style="COLOR: maroon">Lua</span></strong><strong style="mso-bidi-font-weight: normal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">脚本里的函数</span><span lang=EN-US style="COLOR: maroon"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">假设你的</span><span lang=EN-US>test.lua</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中有</span><span lang=EN-US>:</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue">function Add(x, y) <o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return x+y; <o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue">end<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span><span lang=EN-US>C++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中需要先声明这个函数</span><span lang=EN-US>:</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue">LuaFunction&lt;float&gt; Add =<span style="mso-spacerun: yes">&nbsp; </span>state-&gt;GetGlobal("Add");<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样你就有了</span><span lang=EN-US>Add()</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个函数</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后就可以像平常一样使用它了</span><span lang=EN-US>:</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue">float myret = Add(<st1:chmetcnv UnitName="F" SourceValue="3.14" HasSpace="False" Negative="False" NumberType="1" TCSC="0" w:st="on">3.14f</st1:chmetcnv>,<st1:chmetcnv UnitName="F" SourceValue="5.25" HasSpace="False" Negative="False" NumberType="1" TCSC="0" w:st="on">5.25f</st1:chmetcnv>);<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="COLOR: maroon">6.Lua</span></strong><strong style="mso-bidi-font-weight: normal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">脚本中调用</span><span lang=EN-US style="COLOR: maroon">C++</span></strong><strong style="mso-bidi-font-weight: normal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数</span><span lang=EN-US style="COLOR: maroon"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在读取</span><span lang=EN-US>test.lua</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之前要先把</span><span lang=EN-US>C++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数注册到</span><span lang=EN-US>Lua</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的运行时栈里</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样在执行</span><span lang=EN-US>lua</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">脚本的时候</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">才知道执行哪一个函数</span><span lang=EN-US>:</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">首先有函数</span><span lang=EN-US>:</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue">int LS_PrintNumber(LuaState* state)<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue">{<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US style="COLOR: blue">LuaStack args(state);<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (args[1].IsNumber()) {<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf("%f\n", args[1].GetNumber());<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 0;<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue">}<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后注册这个函数到</span><span lang=EN-US>Lua:</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue">state-&gt;GetGlobals().Register("PrintNumber", LS_PrintNumber);<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样就把</span><span lang=EN-US>LS_PrintNumber</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">映射为</span><span lang=EN-US>Lua</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中可以使用的函数</span><span lang=EN-US>PrintNumber.</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Test.lua</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">脚本中添加调用语句</span><span lang=EN-US>:</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: blue">PrintNumber(30);<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当</span><span lang=EN-US style="COLOR: blue">state-&gt;DoFile("test.lua");</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">执行的时候</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就执行了</span><span lang=EN-US>C++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的这个函数</span><span lang=EN-US>.</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">总结</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 14pt; COLOR: red"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本文介绍了</span><span lang=EN-US>LuaPlus</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的基本配置方法和使用</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">希望对你有帮助</span><span lang=EN-US>.</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下一篇将介绍一些高级特性</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如怎样在</span><span lang=EN-US>VS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中调试</span><span lang=EN-US>LuaPlus</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的脚本</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以及对类的操作等</span><span lang=EN-US>.<br></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">如果还有任何疑问可以看看下面这个简单的例子:<span lang=EN-US><o:p><br>&nbsp;<a href="http://www.cppblog.com/Files/singohgod/LuaPlus_Test.rar">/Files/singohgod/LuaPlus_Test.rar</a></o:p></span></p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/singohgod/aggbug/22069.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/singohgod/" target="_blank">大宝天天见</a> 2007-04-16 23:22 <a href="http://www.cppblog.com/singohgod/archive/2007/04/16/22069.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>