﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-积木-随笔分类-Lua</title><link>http://www.cppblog.com/Tongy0/category/20253.html</link><description>No sub title</description><language>zh-cn</language><lastBuildDate>Sun, 24 Feb 2013 01:09:57 GMT</lastBuildDate><pubDate>Sun, 24 Feb 2013 01:09:57 GMT</pubDate><ttl>60</ttl><item><title>使用tolua++调用c/c++</title><link>http://www.cppblog.com/Tongy0/archive/2013/02/22/197991.html</link><dc:creator>Jacc.Kim</dc:creator><author>Jacc.Kim</author><pubDate>Fri, 22 Feb 2013 01:56:00 GMT</pubDate><guid>http://www.cppblog.com/Tongy0/archive/2013/02/22/197991.html</guid><wfw:comment>http://www.cppblog.com/Tongy0/comments/197991.html</wfw:comment><comments>http://www.cppblog.com/Tongy0/archive/2013/02/22/197991.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tongy0/comments/commentRss/197991.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tongy0/services/trackbacks/197991.html</trackback:ping><description><![CDATA[<div>首先，先温故一下c/c++调用lua的步骤：<br />1) 下载lua源码包(提示：下载后，需要自行编译，编译后才会有相应的lib)<br />2) 将编译好的lib链入项目<br />3) 包含相应的lua头文件，如下：<br />#ifdef __cplusplus<br />extern "C" {<br />#endif<br />#include "lua.h"<br />#include "lualib.h"<br />#include "lauxlib.h"<br />#ifdef __cplusplus<br />}<br />#endif<br />此处头跟尾处的__cplusplus宏判断是有必要的。<br />4)&nbsp;创建一个lua解析器：lua_State *L; L = lua_open();<br />5) 调用lua库接口：luaL_openlibs(L);打开lua库<br />6) 至此，就可以使用lua相关的功能了。如：加载lua脚本(luaL_dofileL, luaFileName);等等<br />7) 在使用完lua后，一定要关掉lua解析器。luaL_close(L);<br /><br />接下来要介绍的是相反的调用工作。即：通过lua调用c/c++相关的功能。在此就需要用到tolua++了。<br />在此同样先介绍一下实现步骤：<br />1) 同样需要先下载tolua++库<br />2) 将相关的tolua++库链入项目<br />3) 将需要导给lua脚本使用的c/c++常量、变量、宏、接口、甚至类以及其接口，整理到相应的干净包中。<br />4) 使用tolua++工具(即：.exe文件)，解析干净包。解析成功后，将自动生成相应的c/c++的头文件及源码<br />5) 包含同 4) 生成的头文件，同时包含tolua++要关的头文件<br />6) 明确初始化包。具体为：tolua_XXXX_open(L);<br />7) 此后就可以在lua脚本中使用c/c++相关的功能了。<br />至此c/c++与lua间的相互调用就全部介绍完毕。<br /><br />另外，以个人实际游戏框架设计的经验来看，其实，我们可以定义一个协议接口，将项目与lua的接口连接起来。这样，我们在c/c++与lua间的调用就可以通过通用的一个或很少的几个接口来工作。如此整个框架就搭建起来了。</div><img src ="http://www.cppblog.com/Tongy0/aggbug/197991.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tongy0/" target="_blank">Jacc.Kim</a> 2013-02-22 09:56 <a href="http://www.cppblog.com/Tongy0/archive/2013/02/22/197991.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lua函数调用的一个特例</title><link>http://www.cppblog.com/Tongy0/archive/2012/12/08/196115.html</link><dc:creator>Jacc.Kim</dc:creator><author>Jacc.Kim</author><pubDate>Sat, 08 Dec 2012 06:42:00 GMT</pubDate><guid>http://www.cppblog.com/Tongy0/archive/2012/12/08/196115.html</guid><wfw:comment>http://www.cppblog.com/Tongy0/comments/196115.html</wfw:comment><comments>http://www.cppblog.com/Tongy0/archive/2012/12/08/196115.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tongy0/comments/commentRss/196115.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tongy0/services/trackbacks/196115.html</trackback:ping><description><![CDATA[<div>正常情况下，Lua对函数的调用与c/c++是一样的。<br />即：调用函数时，必须加上括号。如：<br /><br />声明：<br />function testFunc(x, y)<br />&nbsp;&nbsp;&nbsp;// do something...<br />end;<br /><br />调用：<br />testFunc(3, 4);<br /><br />但是有一个特殊是：如果函数的参数只有一个。并且这个参数是字符串或者是表结构时，括号可以不写。如下：<br />print "Hello world!";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;它等价于： print("Hello world!");<br />dofile "a.lua";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;它等价于： dofile("a.lua");<br />yourfunction {x = 10, y = 20};&nbsp;&nbsp;&nbsp;它等价于： yourfunction({x = 10, y = 20});<br />type {}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;它等价于： type({});</div><img src ="http://www.cppblog.com/Tongy0/aggbug/196115.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tongy0/" target="_blank">Jacc.Kim</a> 2012-12-08 14:42 <a href="http://www.cppblog.com/Tongy0/archive/2012/12/08/196115.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lua中的表结构语法总结</title><link>http://www.cppblog.com/Tongy0/archive/2012/12/08/196114.html</link><dc:creator>Jacc.Kim</dc:creator><author>Jacc.Kim</author><pubDate>Sat, 08 Dec 2012 06:18:00 GMT</pubDate><guid>http://www.cppblog.com/Tongy0/archive/2012/12/08/196114.html</guid><wfw:comment>http://www.cppblog.com/Tongy0/comments/196114.html</wfw:comment><comments>http://www.cppblog.com/Tongy0/archive/2012/12/08/196114.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tongy0/comments/commentRss/196114.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tongy0/services/trackbacks/196114.html</trackback:ping><description><![CDATA[<div>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000"></span><span style="color: #000000">--</span><span style="color: #000000">&nbsp;学习一下表结构的语法<br /></span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">function&nbsp;studyTableStruct()<br /></span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;testTable&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;{};&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">初始化一个空的(即：该表中没有任何域)<br /></span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;testTable[</span><span style="color: #000000">2</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">是吧</span><span style="color: #000000">"</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;print(testTable[</span><span style="color: #000000">2</span><span style="color: #000000">]);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">此处正常输出。说明就算是添加新字段，字段的索引也未必就一定要按顺序从1开始。<br /></span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;testTable[</span><span style="color: #000000">1</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">ak47</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">添加一个无名字的新字段，而且它的索引值是为1的。([a]记住：只要字段有索引的概念，则它就没有名字)&nbsp;。这边的&nbsp;[a]与下面的&nbsp;[b]&nbsp;说明很关键<br /></span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;print(testTable[</span><span style="color: #000000">1</span><span style="color: #000000">]);<br /></span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;testTable.newField&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">newfield</span><span style="color: #000000">"</span><span style="color: #000000">;</span><span style="color: #000000">--</span><span style="color: #000000">添加一个名字为newField的新字段。([b]记住：只要字段有名字，则它就没有索引这一概念。)<br /></span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;print(testTable.newField);<br /></span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;testTable[</span><span style="color: #000000">"</span><span style="color: #000000">x</span><span style="color: #000000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">哇塞，这也行？</span><span style="color: #000000">"</span><span style="color: #000000">;<br /></span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;print(testTable[</span><span style="color: #000000">"</span><span style="color: #000000">x</span><span style="color: #000000">"</span><span style="color: #000000">]);<br /></span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">&nbsp;如果理解了上面的&nbsp;[a]&nbsp;与&nbsp;[b]&nbsp;，则很容易理解下面的例子<br /></span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;{x&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">20</span><span style="color: #000000">,&nbsp;y&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">};</span><span style="color: #000000">--</span><span style="color: #000000">这个例子是来自教材上的例子。但是在此本人有做了修改。并亲自测试过后，总结了上面的&nbsp;[a]&nbsp;与&nbsp;[b]&nbsp;点<br /></span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;print(a.x);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">输出：</span><span style="color: #000000">20</span><span style="color: #000000"><br /></span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;print(a[</span><span style="color: #000000">1</span><span style="color: #000000">]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">输出：nil<br /></span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;print(a[</span><span style="color: #000000">"</span><span style="color: #000000">x</span><span style="color: #000000">"</span><span style="color: #000000">]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">输出：</span><span style="color: #000000">20</span><span style="color: #000000"><br /></span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">如果将a的结构改成如下：<br /></span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;nil;<br /></span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;{x&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">20</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">agogo</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;y&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">ak47</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">mytest</span><span style="color: #000000">"</span><span style="color: #000000">};<br /></span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;print(a.x);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">输出：</span><span style="color: #000000">20</span><span style="color: #000000"><br /></span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;print(a[</span><span style="color: #000000">1</span><span style="color: #000000">]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">输出：agogo<br /></span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;print(a[</span><span style="color: #000000">2</span><span style="color: #000000">]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">输出：ak47<br /></span><span style="color: #008080">26</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;print(a[</span><span style="color: #000000">3</span><span style="color: #000000">]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">输出：mytest<br /></span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;print(a[</span><span style="color: #000000">"</span><span style="color: #000000">x</span><span style="color: #000000">"</span><span style="color: #000000">]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">输出：</span><span style="color: #000000">20</span><span style="color: #000000"><br /></span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">pritn(a[x]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">这样会蹦。要么像&nbsp;a[</span><span style="color: #000000">1</span><span style="color: #000000">]那样访问。即：中括号呈的内容必须为数字或者使用双引号括号起来<br /></span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">[[<br /></span><span style="color: #008080">30</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;总结一下上面的测试例子：<br /></span><span style="color: #008080">31</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;大括号：{}&nbsp;是用来定义一个表结构的。所谓的定义，其实只不过是给表一个初始化的作用。其实里面的字段域有几个或怎么初始化，都只是影响到初始化时的状态。<br /></span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;后面不要时，完全可以随时将某个字段删除掉（提示：删除只需要将该字段赋nil即可。）<br /></span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;也完全可以随时随地添加一个新的字段。<br /></span><span style="color: #008080">34</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;正因为如此灵活，所以说&nbsp;{}&nbsp;仅仅只是影响表的初始化的结构状态。<br /></span><span style="color: #008080">35</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">)&nbsp;表的字段域的访问有两种：YourTable.FieldName以及使用中括号&nbsp;[]&nbsp;来访问。<br /></span><span style="color: #008080">36</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a)&nbsp;如果所访问的字段不存在。则返回nil<br /></span><span style="color: #008080">37</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b)&nbsp;使用YourTable.FieldName访问字段时，则如果表中不存在FieldName这个字段时，返回nil。存在时，返回相应的值。像上面的a表中的x与y就可以用这种方式访问。<br /></span><span style="color: #008080">38</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;或者上面的testTable表中的newField或者&nbsp;x字段就可以这样子访问<br /></span><span style="color: #008080">39</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c)&nbsp;使用中括号&nbsp;[]&nbsp;访问时，如果表中的字段是有名称的话，则字段必须使用双引号括号起来。否则访问不到。并且还会蹦。<br /></span><span style="color: #008080">40</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d)&nbsp;[]&nbsp;中的内容，只能是数值索引，或者是使用双引号括号起来的字段的名称。<br /></span><span style="color: #008080">41</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;]]</span><span style="color: #000000">--</span><span style="color: #000000"><br /></span><span style="color: #008080">42</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">43</span>&nbsp;<span style="color: #000000">end<br /></span><span style="color: #008080">44</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">45</span>&nbsp;<span style="color: #000000"></span></div></div><img src ="http://www.cppblog.com/Tongy0/aggbug/196114.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tongy0/" target="_blank">Jacc.Kim</a> 2012-12-08 14:18 <a href="http://www.cppblog.com/Tongy0/archive/2012/12/08/196114.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lua中的 and 与 or</title><link>http://www.cppblog.com/Tongy0/archive/2012/12/08/196113.html</link><dc:creator>Jacc.Kim</dc:creator><author>Jacc.Kim</author><pubDate>Sat, 08 Dec 2012 05:29:00 GMT</pubDate><guid>http://www.cppblog.com/Tongy0/archive/2012/12/08/196113.html</guid><wfw:comment>http://www.cppblog.com/Tongy0/comments/196113.html</wfw:comment><comments>http://www.cppblog.com/Tongy0/archive/2012/12/08/196113.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tongy0/comments/commentRss/196113.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tongy0/services/trackbacks/196113.html</trackback:ping><description><![CDATA[<div>简述：在 Delphi 中，有 and 与 or<br />在 c/c++ 中，有 &amp;&amp; 与 ||<br />在 Lua 中，有 and 与&nbsp;or<br />它们3者都表示逻辑运算符。但它们是有区别的。<br />Delphi中的 and 与 or 不但可以表示逻辑与、逻辑或运算符，还可以表示与运算以及或运算。<br />示例：<br />procedure&nbsp;test;<br />var<br />&nbsp;&nbsp;&nbsp;lVar: integer;<br />&nbsp;&nbsp;&nbsp;lVar2: integer;<br />&nbsp;&nbsp;&nbsp;lVar3: integer;<br />begin<br />&nbsp;&nbsp;&nbsp;lVar = 20;<br />&nbsp;&nbsp;&nbsp;lVar2 = 30;<br />&nbsp;&nbsp;&nbsp;if (10 = lVar) and (20 = lVar2) then<br />&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// do something here.<br />&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;else if (20 = lVar) or (30 = lVar2) then<br />&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// do something here.<br />&nbsp;&nbsp;&nbsp;end;<br />&nbsp;&nbsp;&nbsp;lVar3 = lVar&nbsp;and lVar2;//这个就是相当于c/c++中的 &amp;<br />&nbsp;&nbsp;&nbsp;lVar3 = lVar or lVar2;//这个就相当于c/c++中的 |<br />end;<br /><br />关于 c/c++ 中的 &amp;&amp;、||、&amp;、| 在此，我想就不用多说了吧。<br />接下来说说，Lua中的 and 与 or<br />在 Lua 中，and 也是逻辑运算符，但它的取值很特别：<br />a and b;它的返回值并不是我们所想象的 true 或者 false.而是：如果 a 为假（即：为 false 或者 nil 时），则表达式返回 a。否则就返回 b<br />同样 a or b;它返回的也不是true与false。而是：当 a 为真时，则返回 a 否则返回 b.</div><img src ="http://www.cppblog.com/Tongy0/aggbug/196113.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tongy0/" target="_blank">Jacc.Kim</a> 2012-12-08 13:29 <a href="http://www.cppblog.com/Tongy0/archive/2012/12/08/196113.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lua字符串小小结</title><link>http://www.cppblog.com/Tongy0/archive/2012/12/08/196112.html</link><dc:creator>Jacc.Kim</dc:creator><author>Jacc.Kim</author><pubDate>Sat, 08 Dec 2012 05:12:00 GMT</pubDate><guid>http://www.cppblog.com/Tongy0/archive/2012/12/08/196112.html</guid><wfw:comment>http://www.cppblog.com/Tongy0/comments/196112.html</wfw:comment><comments>http://www.cppblog.com/Tongy0/archive/2012/12/08/196112.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tongy0/comments/commentRss/196112.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tongy0/services/trackbacks/196112.html</trackback:ping><description><![CDATA[<div>1) Lua字符串可以使用双引号括起来。<br />2) Lua字符串同样可以使用单引号括起来。<br />3) Lua字符串还可以使用 [[...]] 括起来。（提示：中间的 ... 就是字符串的内容。<br />关于这种形式来表达字符串的，有以下说明点：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a) [[ 这是字符串起始标志。（就如同：" 一样）]]&nbsp;当然就是结束标志了。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b) ... 的内容中，就算有转义字符，则转义字符的转义功能失效。它会被按原样输出。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c) ... 中的任何空格都将被保留，按原样输出。（包括行头的空格）<br />因此：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local str = [[这只是一个测试。\r\n是不是北京？？<br />&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;print(str);<br />在屏幕上打印出来的结果应该如下：<br />这只是一个测试。\r\n是不是北京？？<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;吃东西吧。（注意：吃东西吧。前面是有空格的）<br /><br />4) .. 可以用来连接两个字符串。同样也可以用来连接两个数值或者数值与字符串，使它们最终成为一个字符串。<br />注意：如果连接的前后有数值时，最好在 .. 的前与后都加一个空格。<br />示例：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a) local str1 = "Hello, " .. "world!"; // 这时的..的前后可以加或不加空格都正确<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b) local str2 = "Hello, " .. 20;//这时，..的后面最好加上空格<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c) local str3 = 20 .. "world!";//这时，..的前面必须要加上空格。否则会出错<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d) local str3 = 20 .. 30;//这时，..的前面与后面都必须加上空格。否则会出错。<br /><br />5) string.gsub()是用来替换某字符串中的子串的。示例如下：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local strOld = "Hello, world!";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local strNew = string.gsub(strOld, "Hello,", "Hello ");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(strOld);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 输出： Hello, world!<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(strNew);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//输出： Hello world!<br /></div><img src ="http://www.cppblog.com/Tongy0/aggbug/196112.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tongy0/" target="_blank">Jacc.Kim</a> 2012-12-08 13:12 <a href="http://www.cppblog.com/Tongy0/archive/2012/12/08/196112.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c++调用lua步骤</title><link>http://www.cppblog.com/Tongy0/archive/2012/12/08/196111.html</link><dc:creator>Jacc.Kim</dc:creator><author>Jacc.Kim</author><pubDate>Sat, 08 Dec 2012 04:49:00 GMT</pubDate><guid>http://www.cppblog.com/Tongy0/archive/2012/12/08/196111.html</guid><wfw:comment>http://www.cppblog.com/Tongy0/comments/196111.html</wfw:comment><comments>http://www.cppblog.com/Tongy0/archive/2012/12/08/196111.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tongy0/comments/commentRss/196111.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tongy0/services/trackbacks/196111.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">stdafx.h</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">iostream</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /></span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">C</span><span style="color: #000000">"</span><span style="color: #000000">{<br /></span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">lua.h</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">lualib.h</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">lauxlib.h</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">lua_State&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">L;<br /></span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;_tmain(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;argc,&nbsp;_TCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;argv[])<br /></span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">{<br /></span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">*&nbsp;创建一个指向Lua解释器的指针。</span><span style="color: #008000"><br /></span><span style="color: #008080">18</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;L&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;lua_open();<br /></span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">*&nbsp;函数加载Lua库</span><span style="color: #008000"><br /></span><span style="color: #008080">20</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;luaL_openlibs(L);<br /></span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">*&nbsp;加载Lua脚本</span><span style="color: #008000"><br /></span><span style="color: #008080">22</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;luaL_dofile(L,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">../TestException/add.lua</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;x&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">3</span><span style="color: #000000">,&nbsp;y&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">8</span><span style="color: #000000">;<br /></span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">函数名</span><span style="color: #008000"><br /></span><span style="color: #008080">26</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lua_getglobal(L,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">add</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">第一个参数压栈</span><span style="color: #008000"><br /></span><span style="color: #008080">28</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lua_pushnumber(L,&nbsp;x);<br /></span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">第二个参数压栈</span><span style="color: #008000"><br /></span><span style="color: #008080">30</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lua_pushnumber(L,&nbsp;y);<br /></span><span style="color: #008080">31</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">调用函数</span><span style="color: #008000"><br /></span><span style="color: #008080">32</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lua_call(L,&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br /></span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">得到返回值</span><span style="color: #008000"><br /></span><span style="color: #008080">34</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;sum&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">)lua_tonumber(L,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">);<br /></span><span style="color: #008080">35</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lua_pop(L,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br /></span><span style="color: #008080">36</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;sum&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;endl;<br /></span><span style="color: #008080">37</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">38</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">*&nbsp;关闭释放资源</span><span style="color: #008000"><br /></span><span style="color: #008080">39</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;lua_close(L);<br /></span><span style="color: #008080">40</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">41</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;waitplease;<br /></span><span style="color: #008080">42</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">43</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">44</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">45</span>&nbsp;<span style="color: #000000"></span></div>
<p>&nbsp;</p> <img src ="http://www.cppblog.com/Tongy0/aggbug/196111.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tongy0/" target="_blank">Jacc.Kim</a> 2012-12-08 12:49 <a href="http://www.cppblog.com/Tongy0/archive/2012/12/08/196111.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>