锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品一区二区在线观看,蜜臀a∨国产成人精品,欧美电影免费观看高清完整版 http://m.shnenglu.com/mybios/category/3079.html娓告垙寮鍙?C++ Cocos2d-x OpenGL DirectX 鏁板 璁$畻鏈哄浘褰㈠ SQL Server <BR> <BR>zh-cnTue, 19 Jul 2016 07:15:22 GMTTue, 19 Jul 2016 07:15:22 GMT60tolua++瀵煎嚭C++綾葷殑涓浜涢棶棰樺拰瑙e喅鏂規硶http://m.shnenglu.com/mybios/archive/2010/02/09/107616.html鏉庨敠淇?mybios)鏉庨敠淇?mybios)Tue, 09 Feb 2010 11:43:00 GMThttp://m.shnenglu.com/mybios/archive/2010/02/09/107616.htmlhttp://m.shnenglu.com/mybios/comments/107616.htmlhttp://m.shnenglu.com/mybios/archive/2010/02/09/107616.html#Feedback7http://m.shnenglu.com/mybios/comments/commentRss/107616.htmlhttp://m.shnenglu.com/mybios/services/trackbacks/107616.html闃呰鍏ㄦ枃

鏉庨敠淇?mybios) 2010-02-09 19:43 鍙戣〃璇勮
]]>
銆愬師鍒涖戦瓟鍏戒簤闇窱II 鍦板浘緙栬緫鍣ㄥ師鐞嗭紙鍏抽敭鏄剼鏈級http://m.shnenglu.com/mybios/archive/2006/11/19/15404.html鏉庨敠淇?mybios)鏉庨敠淇?mybios)Sat, 18 Nov 2006 16:20:00 GMThttp://m.shnenglu.com/mybios/archive/2006/11/19/15404.htmlhttp://m.shnenglu.com/mybios/comments/15404.htmlhttp://m.shnenglu.com/mybios/archive/2006/11/19/15404.html#Feedback9http://m.shnenglu.com/mybios/comments/commentRss/15404.htmlhttp://m.shnenglu.com/mybios/services/trackbacks/15404.html銆銆娉ㄦ剰錛氭湰鏂囩函灞炴槸鏈漢浠庣爺絀墮瓟鍏戒簤闇窱II鍦板浘緙栬緫鍣ㄧ殑榪囩▼涓殑涓縐嶇寽鎯籌紝鎵浠ワ紝涓嶅綋涔嬪錛岃繕璇烽珮鎵嬫寚鍑恒傝阿璋紒

銆銆欖斿吔浜夐湼III鎴戜互鍓嶇帺寰楁瘮杈冨錛屼篃鍚浠栫殑鍦板浘緙栬緫鍣ㄩ潪甯哥墰X錛屼互鍓嶄篃鏇劇粡鎯崇紪杈戜釜鍦板浘鍑烘潵銆備絾鏄紝闄愪簬褰撴椂寰楁按騫抽棶棰橈紝娌℃湁鎴愬姛銆傜洿鍒版渶榪戝湪鐮旂┒濡備綍鍒朵綔娓告垙鐨勬椂鍊欙紝鎵撳紑欖斿吔浜夐湼III鐨勫湴鍥劇紪杈戝櫒鏉ョ湅錛岀獊鐒舵湁涓縐嶆墿鐒跺紑鏈楃殑鎰熻錛佸摝錛佸師鏉ュ湴鍥劇紪杈戝櫒鏄繖鏍峰嚭鏉ョ殑錛侀棽璇濅笉澶氳錛侀┈涓婅繘鍏ユ棰橈紒

銆銆欖斿吔浜夐湼III鐨勫湴鍥劇紪杈戝櫒浣跨敤浜嗕竴涓枃浠舵潵浠h〃涓涓湴鍥撅紝鍦板浘閲屽寘鍚簡浠涔堜笢瑗匡紵鎴戞棤浠庡緱鐭ワ紝浣嗘槸錛屼粠浠栫殑緙栬緫鍣ㄤ笂鐪嬶紝鐪嬪埌緙栬緫鍣ㄨ兘瀵瑰湴鍥句慨鏀圭殑涓滆タ錛屽氨鍙互澶ф鐚滄兂鍒版湁鍝簺涓滆タ銆備粩緇嗙湅鍦板浘緙栬緫鍣紝鐪嬪埌鏈夐偅涔堝嚑涓ā鍧楋細鍦板艦緙栬緫鍣ㄣ佸紑鍏崇紪杈戝櫒銆佸0闊崇紪杈戝櫒銆佺墿浣撶紪杈戝櫒銆佹垬褰圭紪杈戝櫒銆丄I緙栬緫鍣ㄣ佺墿浣撶鐞嗗櫒銆佽緭鍏ョ鐞嗗櫒銆傛垜鎶婃垜鐨勭悊瑙i愪竴璇存潵闃呰鍏ㄦ枃  闃呰鍏ㄦ枃

鏉庨敠淇?mybios) 2006-11-19 00:20 鍙戣〃璇勮
]]>
銆愯漿璐淬慙ua 緙栫▼鎶宸?/title><link>http://m.shnenglu.com/mybios/archive/2006/11/18/15358.html</link><dc:creator>鏉庨敠淇?mybios)</dc:creator><author>鏉庨敠淇?mybios)</author><pubDate>Sat, 18 Nov 2006 07:04:00 GMT</pubDate><guid>http://m.shnenglu.com/mybios/archive/2006/11/18/15358.html</guid><wfw:comment>http://m.shnenglu.com/mybios/comments/15358.html</wfw:comment><comments>http://m.shnenglu.com/mybios/archive/2006/11/18/15358.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/mybios/comments/commentRss/15358.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/mybios/services/trackbacks/15358.html</trackback:ping><description><![CDATA[ <div id="hvzpftn" class="page"> <a >Lua</a> 鐨?5.1 鐗堟湰宸茬粡姝e紡鍙戝竷銆傜幇鍦紝鎴戜滑搴旇鎶婂叏閮ㄨ璁烘斁鍦ㄨ繖涓増鏈笂銆?br /><br /><img title="Hot!" height="11" alt="Hot!" hspace="4" src="http://blog.codingnow.com/cloud//images/idea.gif" width="7" border="0" /><strong>搴旇灝介噺浣跨敤 local 鍙橀噺鑰岄潪 global 鍙橀噺</strong>銆傝繖鏄?<a >Lua</a> 鍒濆鑰呮渶瀹規槗鐘殑閿欒銆俫lobal 鍙橀噺瀹為檯涓婃槸鏀懼湪涓寮犲叏灞鐨?table 閲岀殑銆俫lobal 鍙橀噺瀹為檯涓婃槸鍒╃敤涓涓?string (鍙橀噺鍚嶄綔 key) 鍘昏闂繖涓?table 銆傝櫧鐒?a target="_blank"><img title="鍦ㄦ柊紿楀彛涓墦寮" height="11" alt="[InterWiki]" hspace="4" src="http://blog.codingnow.com/cloud//images/inter.gif" width="11" border="0" /></a><a >Lua5 鐨?table 鏁堢巼寰堥珮</a> 錛屼絾鏄浉瀵逛簬 local 鍙橀噺錛屼緷鐒舵湁寰堝ぇ鐨勬晥鐜囨崯澶便俵ocal 鍙橀噺鏄洿鎺ラ氳繃 <a >Lua</a> 鐨勫爢鏍堣闂殑銆傛湁浜?global 鍙橀噺鐨勮闂槸涓嶇粡鎰忕殑錛屾瘮濡傛垜浠湁鍙岄噸寰幆鎿嶄綔涓涓凱浠g殑 table錛?br /><pre class="code"><span id="hvzpftn" class="kw1">for</span> k1,v1 <span id="hvzpftn" class="kw1">in</span><span id="hvzpftn" class="kw1">pairs</span><span id="hvzpftn" class="br0">(</span>tbl<span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="kw1">do</span><span id="hvzpftn" class="kw1">for</span> k2,v2 <span id="hvzpftn" class="kw1">in</span><span id="hvzpftn" class="kw1">pairs</span><span id="hvzpftn" class="br0">(</span>v1<span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="kw1">do</span> ... <span id="hvzpftn" class="kw1">end</span> end</pre><br /><br />榪欓噷錛宲airs 鍏跺疄鏄竴涓叏灞鍙橀噺搴旂敤鐨勫嚱鏁般傚鏋滄垜浠繖鏍峰仛錛?br /><pre class="code"><span id="hvzpftn" class="kw1">do</span><span id="hvzpftn" class="kw1">local</span><span id="hvzpftn" class="kw1">pairs</span>=pairs <span id="hvzpftn" class="kw1">for</span> k1,v1 <span id="hvzpftn" class="kw1">in</span><span id="hvzpftn" class="kw1">pairs</span><span id="hvzpftn" class="br0">(</span>tbl<span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="kw1">do</span><span id="hvzpftn" class="kw1">for</span> k2,v2 <span id="hvzpftn" class="kw1">in</span><span id="hvzpftn" class="kw1">pairs</span><span id="hvzpftn" class="br0">(</span>v1<span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="kw1">do</span> ... <span id="hvzpftn" class="kw1">end</span><span id="hvzpftn" class="kw1">end</span> end</pre><br /><br />鏁堢巼浼氱◢寰彁楂樹竴浜涖傚鏋滄槸鍗曞眰寰幆錛岃繖鏍峰仛灝辨病鏈夋剰涔夈傚洜涓?for ... in 寰幆涓殑 pairs 榪欎釜鍑芥暟鍙細琚皟鐢ㄤ竴嬈★紝鑰屼笉鏄瘡嬈″驚鐜兘鍘昏皟銆傛垜浠殑鍘熷垯鍏跺疄鏄紝琚嬈¤鍙栫殑 global 鍙橀噺錛岄兘搴旇鎻愬彇鍑烘潵鏀懼埌 local 鍙橀噺涓?br /><br /><img title="Hot!" height="11" alt="Hot!" hspace="4" src="http://blog.codingnow.com/cloud//images/idea.gif" width="7" border="0" /><strong>璀︽儠涓存椂鍙橀噺</strong> 瀛楃涓茬殑榪炴帴鎿嶄綔錛屼細浜х敓鏂扮殑瀵硅薄銆傝繖鏄敱 lua 鏈韓鐨?string 綆$悊鏈哄埗瀵艱嚧鐨勩俵ua 鍦?VM 鍐呭鐩稿悓鐨?string 姘歌繙鍙繚鐣欎竴浠藉敮涓 copy 錛岃繖鏍鳳紝鎵鏈夊瓧絎︿覆姣旇緝灝卞彲浠ョ畝鍖栦負鍦板潃姣旇緝銆傝繖涔熸槸 lua 鐨?table 宸ヤ綔寰堝揩鐨勫師鍥犱箣涓銆傝繖縐?string 綆$悊鐨勭瓥鐣ワ紝璺?java 絳変竴鏍鳳紝鎵浠ヨ窡 java 涓鏍鳳紝搴旇灝介噺閬垮厤鍦ㄥ驚鐜唴涓嶆柇鐨勮繛鎺ュ瓧絎︿覆錛屾瘮濡?a = a..x 榪欐牱銆傛瘡嬈¤繍琛岋紝閮藉緢鍙兘浼氱敓鎴愪竴浠芥柊鐨?copy 銆?br /><br />鍚屾牱錛岃浣忥紝姣忔鏋勯犱竴浠?table 閮戒細澶氫竴浠?table 鐨?copy 銆傛瘮濡傚湪 lua 閲岋紝鎶婂鉤闈㈠潗鏍囧皝瑁呮垚 { x, y } 鐢ㄤ簬鍙傛暟浼犻掞紝灝遍渶瑕佽冭檻榪欎釜闂銆傛瘡嬈′綘鎯蟲瀯閫犱竴涓潗鏍囧璞′紶閫掔粰涓涓嚱鏁幫紝{ 10,20 }聽聽榪欐牱鏄庣‘鐨勫啓鍑猴紝閮戒細鏋勯犱竴涓柊鐨?table 鍑烘潵銆傝涔堬紝鎴戜滑鎯沖姙娉曡冭檻 table 鐨勯噸鐢紱瑕佷箞錛屽共鑴嗙敤 x,y 涓や釜鍙傛暟浼犻掑潗鏍囥?br /><br />鍚屾牱闇瑕佹敞鎰忕殑鏄互 function foo (...) 榪欑鏂瑰紡瀹氫箟鍑芥暟錛?... 榪欑涓嶅畾鍙傛暟錛屾瘡嬈¤皟鐢ㄧ殑鏃跺欓兘浼氳瀹氫箟鍑轟竴涓?table 瀛樻斁涓嶅畾鏁伴噺鐨勫弬鏁般?br /><br />榪欎簺涓存椂鏋勯犵殑瀵硅薄寰寰瑕佸埌 gc 鐨勬椂鍊欐墠琚洖鏀訛紝榪囦簬棰戠箒鐨?gc 鏈夋椂鍊欐鏄晥鐜囩摱棰堛?br /><br /><img title="Hot!" height="11" alt="Hot!" hspace="4" src="http://blog.codingnow.com/cloud//images/idea.gif" width="7" border="0" /><strong>浣跨敤 closure 浠f浛 table</strong> 涓婇潰鎻愬埌灝佽鍧愭爣鐨勯棶棰樸傝瘹鐒訛紝鎴戜滑鍙互鐢?{ x=1,y=2 } 榪欐牱灝佽涓涓潗鏍囥備笉榪囪繕鏈変竴涓柟娉曞彲渚涢夋嫨銆傚畠紼嶅井杞婚噺涓鐐廣?br /><br /><pre class="code"><span id="hvzpftn" class="kw1">function</span> point <span id="hvzpftn" class="br0">(</span>x,y<span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="kw1">return</span><span id="hvzpftn" class="kw1">function</span><span id="hvzpftn" class="br0">(</span><span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="kw1">return</span> x,y <span id="hvzpftn" class="kw1">end</span> end 聽 <span id="hvzpftn" class="co1">-- 浣跨敤鑼冧緥</span> p=point<span id="hvzpftn" class="br0">(</span><span id="hvzpftn" class="nu0">1</span>,<span id="hvzpftn" class="nu0">2</span><span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="kw1">print</span><span id="hvzpftn" class="br0">(</span>p<span id="hvzpftn" class="br0">(</span><span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="co1">-- 杈撳嚭 1 2 </span> 聽</pre><br /><br />濡傛灉浣犳効鎰忥紝榪樺彲浠ュ仛鐨勫鏉備竴鐐癸細<br /><pre class="code"><span id="hvzpftn" class="kw1">function</span> point <span id="hvzpftn" class="br0">(</span>x,y<span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="kw1">return</span><span id="hvzpftn" class="kw1">function</span><span id="hvzpftn" class="br0">(</span>idx<span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="kw1">if</span> idx==<span id="hvzpftn" class="st0">"x"</span><span id="hvzpftn" class="kw1">then</span><span id="hvzpftn" class="kw1">return</span> x <span id="hvzpftn" class="kw1">elseif</span> idx==<span id="hvzpftn" class="st0">"y"</span><span id="hvzpftn" class="kw1">then</span><span id="hvzpftn" class="kw1">return</span> y <span id="hvzpftn" class="kw1">else</span><span id="hvzpftn" class="kw1">return</span> x,y <span id="hvzpftn" class="kw1">end</span><span id="hvzpftn" class="kw1">end</span> end 聽 <span id="hvzpftn" class="co1">-- 浣跨敤鑼冧緥</span> p=point<span id="hvzpftn" class="br0">(</span><span id="hvzpftn" class="nu0">1</span>,<span id="hvzpftn" class="nu0">2</span><span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="kw1">print</span><span id="hvzpftn" class="br0">(</span>p<span id="hvzpftn" class="br0">(</span><span id="hvzpftn" class="st0">"x"</span><span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="co1">-- 1</span><span id="hvzpftn" class="kw1">print</span><span id="hvzpftn" class="br0">(</span>p<span id="hvzpftn" class="br0">(</span><span id="hvzpftn" class="st0">"y"</span><span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="co1">-- 2 </span> 聽</pre><br /><br />x,y 瀹為檯琚瓨鏀懼湪 closure 閲岋紝姣忔璋冪敤 function point 閮芥湁涓浠界嫭绔嬬殑 closure銆傚綋鐒訛紝function 鐨?code 鍙湁涓浠姐?br /><br /><img title="Hot!" height="11" alt="Hot!" hspace="4" src="http://blog.codingnow.com/cloud//images/idea.gif" width="7" border="0" /><strong>璁炬硶鍑忓皯浠?C 鍚?Lua 浼犻掑瓧絎︿覆</strong> 瀛楃涓插父閲忓湪 Lua VM 鍐呴儴宸ヤ綔鐨勯潪甯稿揩錛屼絾鏄竴涓粠 C 鍚?lua vm 閫氳繃 lua_pushstring 涔嬬被鐨?api 浼犻掕繘 VM 鏃訛紝灝遍渶瑕佹巶閲忎竴涓嬩簡銆傝繖鑷沖皯鍖呭惈涓涓啀 hash 鍜屽尮閰嶇殑榪囩▼銆?a target="_blank"><img title="鍦ㄦ柊紿楀彛涓墦寮" height="11" alt="[InterWiki]" hspace="4" src="http://blog.codingnow.com/cloud//images/inter.gif" width="11" border="0" /></a><a >鎴戠殑 Blog 涓婄殑涓綃囨枃绔犺璁轟簡榪欎釜闂</a>銆?br /><br /><img title="Hot!" height="11" alt="Hot!" hspace="4" src="http://blog.codingnow.com/cloud//images/idea.gif" width="7" border="0" /><strong>lua 涓殑緇ф壙</strong> lua 涓疄鐜?OO 錛岃櫄琛ㄥ線寰璁劇疆涓涓?metatable 騫惰緗?__index 錛岃岀戶鎵垮垯鐢?metatable 鐨?__index 鎶婅櫄琛ㄤ覆璧鋒潵銆傚綋綾葷戶鎵垮眰嬈¤繃澶氱殑鏃跺欙紝鏁堢巼姣旇緝浣庯紝閭d箞灝卞彲浠ョ敤涓嬮潰榪欎釜鎶宸с?br /><pre class="code"><span id="hvzpftn" class="kw1">function</span> inherit<span id="hvzpftn" class="br0">(</span>sub,super<span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="kw1">setmetatable</span><span id="hvzpftn" class="br0">(</span>sub, <span id="hvzpftn" class="br0">{</span> __index=<span id="hvzpftn" class="kw1">function</span><span id="hvzpftn" class="br0">(</span>t,k<span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="kw1">local</span> ret=super<span id="hvzpftn" class="br0">[</span>k<span id="hvzpftn" class="br0">]</span> sub<span id="hvzpftn" class="br0">[</span>k<span id="hvzpftn" class="br0">]</span>=ret <span id="hvzpftn" class="kw1">return</span> ret <span id="hvzpftn" class="kw1">end</span><span id="hvzpftn" class="br0">}</span><span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="kw1">end</span></pre><br /><br /><img title="Hot!" height="11" alt="Hot!" hspace="4" src="http://blog.codingnow.com/cloud//images/idea.gif" width="7" border="0" /><strong>鍒╃敤閫昏緫榪愮畻鐨勭煭璺晥搴?/strong> lua 緙栫▼涓紝and or 璺?C 涓鏍鋒槸鏈夌煭璺晥搴旂殑錛屼笉榪囦粬浠殑榪斿洖鍊煎茍闈?bool 綾誨瀷錛岃屾槸琛ㄨ揪寮忎腑鐨勫乏鍊兼垨鑰呭彸鍊箋傛垜浠父甯稿埄鐢ㄨ繖涓壒鎬ф潵綆鍖栦唬鐮併?br /><pre class="code"><span id="hvzpftn" class="kw1">function</span> foo<span id="hvzpftn" class="br0">(</span>arg<span id="hvzpftn" class="br0">)</span> arg=arg <span id="hvzpftn" class="kw1">or</span><span id="hvzpftn" class="st0">"default"</span> ... <span id="hvzpftn" class="kw1">end</span></pre><br />鍒╃敤 or 榪愮畻璧嬬己鐪佸兼槸鏈甯哥敤鐨勬妧宸с備笂渚嬩腑錛屽鏋?arg 涓?nil 錛宎rg 灝變細琚祴鍊間負 "default" 銆備絾鏄繖涓妧宸ф湁涓己闄鳳紝褰撶己鐪佸兼槸 true 鐨勬椂鍊欎細鏈夌偣闂銆?br /><pre class="code">a=a <span id="hvzpftn" class="kw1">or</span><span id="hvzpftn" class="kw1">true</span><span id="hvzpftn" class="co1">-- 閿欒鐨勫啓娉曪紝褰?a 鏄庣‘鍐欎負 false 鐨勬椂鍊欙紝涔熶細琚敼鍙樻垚 true 銆?/span> a= a ~= <span id="hvzpftn" class="kw1">false</span><span id="hvzpftn" class="co1">-- 姝g‘鐨勫啓娉曪紝褰?a 涓?nil 鐨勬椂鍊欙紝琚祴鍊間負 true 錛涜?false 鍒欎笉鍙樸?</span> 聽</pre><br /><br />鍙﹀錛屽閥濡欎嬌鐢?and or 榪樺彲浠ュ疄鐜扮被浼?C 璇█涓殑 ?: 涓夊厓鎿嶄綔錛?br /><pre class="code"><span id="hvzpftn" class="kw1">function</span><span id="hvzpftn" class="kw1">max</span><span id="hvzpftn" class="br0">(</span>a,b<span id="hvzpftn" class="br0">)</span><span id="hvzpftn" class="kw1">return</span> a>b <span id="hvzpftn" class="kw1">and</span> a <span id="hvzpftn" class="kw1">or</span> b <span id="hvzpftn" class="kw1">end</span></pre><br />涓婇潰榪欎釜鍑芥暟鍙互榪斿洖 a 鍜?b 涓緝澶х殑涓涓紝鍏墮昏緫綾諱技 C 璇█涓殑 return (a>b) ? a : b ;</div> <img src ="http://m.shnenglu.com/mybios/aggbug/15358.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/mybios/" target="_blank">鏉庨敠淇?mybios)</a> 2006-11-18 15:04 <a href="http://m.shnenglu.com/mybios/archive/2006/11/18/15358.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>銆愯漿璐淬戦氳繃渚嬪瓙瀛︿範Luahttp://m.shnenglu.com/mybios/archive/2006/11/18/15356.html鏉庨敠淇?mybios)鏉庨敠淇?mybios)Sat, 18 Nov 2006 06:34:00 GMThttp://m.shnenglu.com/mybios/archive/2006/11/18/15356.htmlhttp://m.shnenglu.com/mybios/comments/15356.htmlhttp://m.shnenglu.com/mybios/archive/2006/11/18/15356.html#Feedback0http://m.shnenglu.com/mybios/comments/commentRss/15356.htmlhttp://m.shnenglu.com/mybios/services/trackbacks/15356.html 涓.Hello World

1.鍓嶈█
銆銆
銆銆鍋舵渶榪戝湪瀛︿範Lua, 鎵浠ュ啓鍑哄績寰楀拰澶у鍏變韓, 浜夊彇涓澶╁啓涓綃? 鍢垮樋.
銆銆鎵嶅紑濮嬪鎵浠ュ唴瀹瑰緢嫻? 甯屾湜澶у鍖呮兜.
銆銆Lua鏄竴縐嶅畬鍏ㄥ厤璐圭殑鑴氭湰璇█, 鍙互鍜孋/C++璇█绱у瘑緇撳悎,
銆銆瀹冪殑瀹樻柟緗戠珯鍦╤ttp://www.lua.org. 鍦ㄧ綉绔欎笂鍙互涓嬭澆鍒發ua鐨勬簮鐮? 娌℃湁鍙?br />銆銆鎵ц鐗堟湰, 涓嶈繃涓嶇敤鎷呭績, 鍥犱負lua婧愮爜鍙互鍦ㄤ換浣曚竴縐岰/C++鐨勭紪璇戝櫒涓婄紪璇?
銆銆
銆銆濡傛灉瑕佸涔燣ua, 瀹樻柟緗戠珯涓婄殑Reference鏄繀澶囩殑錛屼笂闈㈡湁姣忎釜鍛戒護鐨勭敤娉曪紝闈炲父璇︾粏銆?br />銆銆鍙傝冩墜鍐?http://www.lua.org/manual/5.0/
銆銆浣滆呭啓鐨凱rogramming in Lua http://www.lua.org/pil/
銆銆
2.緙栬瘧
銆銆濡傛灉鐢ㄧ殑VC6, 鍙互涓嬭澆鎵闇鐨刾roject鏂囦歡,鍦板潃鍦?br />銆銆http://sourceforge.net/project/showfiles.php?group_id=32250&package_id=115604
銆銆VSNET2003鍙互涓嬭澆榪欎釜sln鏂囦歡http://home.comcast.net/~vertigrated/lua/vs7.zip
銆銆鍋剁敤鐨勬槸cygwin鍜宭inux, 鎵撳叆浠ヤ笅鍛戒護鍗沖彲,
銆銆tar -zxvf lua-5.0.2.tar.gz
銆銆cd lua-5.0.2
銆銆sh ./configure
銆銆make
銆銆榪欐牱灝監K浜嗐?br />銆銆涓轟簡浠ュ悗浣跨敤鏂逛究錛屾渶濂芥妸bin鐩綍鍔犲叆鍒皃ath閲岄潰銆?br />銆銆
3."Hello, world!"
銆銆鐜板湪寮濮嬪伓浠殑絎竴涓皬紼嬪簭"Hello, world!"
銆銆鎶婁互涓嬬▼搴忔墦鍏ユ枃浠秂01.lua
銆銆
銆銆渚?:e01.lua
銆銆-- Hello World in Lua
銆銆print("Hello World.")
銆銆
銆銆Lua鏈変袱縐嶆墽琛屾柟寮忥紝涓縐嶆槸宓屽叆鍒癈紼嬪簭涓墽琛岋紝榪樻湁涓縐嶆槸鐩存帴浠庡懡浠よ鏂瑰紡涓嬫墽琛屻?br />銆銆榪欓噷涓轟簡璋冭瘯鏂逛究錛岄噰鐢ㄧ浜岀鏂瑰紡錛屾墽琛屽懡浠?lua e01.lua
銆銆
銆銆杈撳嚭緇撴灉搴旇鏄細
銆銆Hello World.
銆銆
4.紼嬪簭璇存槑
銆銆絎竴琛?-- Hello World in Lua
銆銆榪欏彞鏄敞閲婏紝鍏朵腑--鍜孋++涓殑//鎰忔濇槸涓鏍風殑
銆銆絎簩琛?print("Hello World.")
銆銆璋冪敤lua鍐呴儴鍛戒護print錛岃緭鍑?Hello World."瀛楃涓插埌灞忓箷錛孡ua涓殑瀛楃涓插叏閮ㄦ槸鐢?鎷搗鏉ョ殑銆?br />銆銆榪欎釜鍛戒護鏄竴涓嚱鏁扮殑璋冪敤錛宲rint鏄痩ua鐨勪竴涓嚱鏁幫紝鑰?Hello World."鏄痯rint鐨勫弬鏁般?br />銆銆
5.璇曡瘯鐪?/b>
銆銆鍦↙ua涓湁涓嶅皯瀛楃涓茬殑澶勭悊鎿嶄綔錛屾湰嬈$殑璇懼悗璇曡瘯鐪嬬殑鍐呭灝辨槸錛屾壘鍑鴻繛鎺ヤ袱涓瓧絎︿覆鐨勬搷浣滐紝
銆銆騫朵笖print鍑烘潵銆?

浜?嫻佺▼鎺у埗

1. 鍑芥暟鐨勪嬌鐢?br />銆銆浠ヤ笅紼嬪簭婕旂ず浜嗗浣曞湪Lua涓嬌鐢ㄥ嚱鏁? 鍙婂眬閮ㄥ彉閲?br />銆銆渚媏02.lua
銆銆-- functions
銆銆function pythagorean(a, b)
銆銆local c2 = a^2 + b^2
銆銆return sqrt(c2)
銆銆end
銆銆print(pythagorean(3,4))
銆銆
銆銆榪愯緇撴灉
銆銆5
銆銆
銆銆紼嬪簭璇存槑
銆銆鍦↙ua涓嚱鏁扮殑瀹氫箟鏍煎紡涓?
銆銆function 鍑芥暟鍚?鍙傛暟)
銆銆...
銆銆end
銆銆涓嶱ascal璇█涓嶅悓, end涓嶉渶瑕佷笌begin閰嶅, 鍙渶瑕佸湪鍑芥暟緇撴潫鍚庢墦涓猠nd灝卞彲浠ヤ簡.
銆銆鏈緥鍑芥暟鐨勪綔鐢ㄦ槸宸茬煡鐩磋涓夎褰㈢洿瑙掕竟, 姹傛枩杈歸暱搴? 鍙傛暟a,b鍒嗗埆琛ㄧず鐩磋杈歸暱,
銆銆鍦ㄥ嚱鏁板唴瀹氫箟浜唋ocal褰㈠彉閲忕敤浜庡瓨鍌ㄦ枩杈圭殑騫蟲柟. 涓嶤璇█鐩稿悓, 瀹氫箟鍦ㄥ嚱鏁板唴鐨勪唬
銆銆鐮佷笉浼氳鐩存帴鎵ц, 鍙湁涓葷▼搴忚皟鐢ㄦ椂鎵嶄細琚墽琛?
銆銆local琛ㄧず瀹氫箟涓涓眬閮ㄥ彉閲? 濡傛灉涓嶅姞local鍒氳〃紺篶2涓轟竴涓叏灞鍙橀噺, local鐨勪綔鐢ㄥ煙
銆銆鏄湪鏈閲屽眰鐨別nd鍜屽叾閰嶅鐨勫叧閿瓧涔嬮棿, 濡俰f ... end, while ... end絳夈傚叏灞鍙橀噺鐨?br />銆銆浣滅敤鍩熸槸鏁翠釜紼嬪簭銆?br />銆銆
銆銆2. 寰幆璇彞
銆銆渚媏03.lua
銆銆-- Loops
銆銆for i=1,5 do
銆銆print("i is now " .. i)
銆銆end
銆銆
銆銆榪愯緇撴灉
銆銆i is now 1
銆銆i is now 2
銆銆i is now 3
銆銆i is now 4
銆銆i is now 5
銆銆
銆銆紼嬪簭璇存槑
銆銆榪欓噷鍋朵滑鐢ㄥ埌浜唂or璇彞
銆銆for 鍙橀噺 = 鍙傛暟1, 鍙傛暟2, 鍙傛暟3 do
銆銆寰幆浣?br />銆銆end
銆銆鍙橀噺灝嗕互鍙傛暟3涓烘闀? 鐢卞弬鏁?鍙樺寲鍒板弬鏁?
銆銆渚嬪:
銆銆for i=1,f(x) do print(i) end
銆銆for i=10,1,-1 do print(i) end
銆銆
銆銆榪欓噷print("i is now " .. i)涓紝鍋朵滑鐢ㄥ埌浜?.錛岃繖鏄敤鏉ヨ繛鎺ヤ袱涓瓧絎︿覆鐨勶紝
銆銆鍋跺湪(1)鐨勮瘯璇曠湅涓彁鍒扮殑錛屼笉鐭ラ亾浣犱滑絳斿浜嗘病鏈夈?br />銆銆铏界劧榪欓噷i鏄竴涓暣鍨嬮噺錛孡ua鍦ㄥ鐞嗙殑鏃跺欎細鑷姩杞垚瀛楃涓插瀷錛屼笉闇鍋朵滑璐瑰績銆?br />銆銆
銆銆3. 鏉′歡鍒嗘敮璇彞
銆銆渚媏04.lua
銆銆-- Loops and conditionals
銆銆for i=1,5 do
銆銆print(鈥渋 is now 鈥?.. i)
銆銆銆銆銆if i < 2 then
銆銆銆銆銆print(鈥渟mall鈥?
銆銆銆銆銆elseif i < 4 then
銆銆銆銆銆print(鈥渕edium鈥?
銆銆銆銆銆else
銆銆銆銆銆print(鈥渂ig鈥?
銆銆銆銆銆end
銆銆end
銆銆
銆銆榪愯緇撴灉
銆銆i is now 1
銆銆small
銆銆i is now 2
銆銆medium
銆銆i is now 3
銆銆medium
銆銆i is now 4
銆銆big
銆銆i is now 5
銆銆big
銆銆
銆銆紼嬪簭璇存槑
銆銆if else鐢ㄦ硶姣旇緝綆鍗? 綾諱技浜嶤璇█, 涓嶈繃姝ゅ闇瑕佹敞鎰忕殑鏄暣涓猧f鍙渶瑕佷竴涓猠nd,
銆銆鍝曠敤浜嗗涓猠lseif, 涔熸槸涓涓猠nd.
銆銆渚嬪
銆銆銆銆if op == "+" then
銆銆銆銆銆r = a + b
銆銆銆銆elseif op == "-" then
銆銆銆銆銆r = a - b
銆銆銆銆elseif op == "*" then
銆銆銆銆銆r = a*b
銆銆銆銆elseif op == "/" then
銆銆銆銆銆r = a/b
銆銆銆銆else
銆銆銆銆銆error("invalid operation")
銆銆銆銆end
銆銆
銆銆
銆銆4.璇曡瘯鐪?/b>
銆銆Lua涓櫎浜唂or寰幆浠ュ, 榪樻敮鎸佸縐嶅驚鐜? 璇風敤while...do鍜宺epeat...until鏀瑰啓鏈枃涓殑for紼嬪簭

涓?Lua鏁版嵁緇撴瀯

1.綆浠?/b>
銆銆Lua璇█鍙湁涓縐嶅熀鏈暟鎹粨鏋? 閭e氨鏄痶able, 鎵鏈夊叾浠栨暟鎹粨鏋勫鏁扮粍鍟?
銆銆綾誨暒, 閮藉彲浠ョ敱table瀹炵幇.
銆銆渚媏05.lua
銆銆-- Arrays
銆銆myData = {}
銆銆myData[0] = 鈥渇oo鈥?br />銆銆myData[1] = 42
銆銆
銆銆-- Hash tables
銆銆myData[鈥渂ar鈥漖 = 鈥渂az鈥?br />銆銆
銆銆-- Iterate through the
銆銆-- structure
銆銆for key, value in myData do
銆銆print(key .. 鈥?鈥?.. value)
銆銆end
銆銆
銆銆杈撳嚭緇撴灉
銆銆0=foo
銆銆1=42
銆銆bar=baz
銆銆
銆銆紼嬪簭璇存槑
銆銆棣栧厛瀹氫箟浜嗕竴涓猼able myData={}, 鐒跺悗鐢ㄦ暟瀛椾綔涓轟笅鏍囪祴浜嗕袱涓肩粰瀹? 榪欑
銆銆瀹氫箟鏂規硶綾諱技浜嶤涓殑鏁扮粍, 浣嗕笌鏁扮粍涓嶅悓鐨勬槸, 姣忎釜鏁扮粍鍏冪礌涓嶉渶瑕佷負鐩稿悓綾誨瀷,
銆銆灝卞儚鏈緥涓竴涓負鏁村瀷, 涓涓負瀛楃涓?
銆銆
銆銆紼嬪簭絎簩閮ㄥ垎, 浠ュ瓧絎︿覆鍋氫負涓嬫爣, 鍙堝悜table鍐呭鍔犱簡涓涓厓绱? 榪欑table闈炲父
銆銆鍍廠TL閲岄潰鐨刴ap. table涓嬫爣鍙互涓篖ua鎵鏀寔鐨勪換鎰忓熀鏈被鍨? 闄や簡nil鍊間互澶?
銆銆
銆銆Lua瀵筎able鍗犵敤鍐呭瓨鐨勫鐞嗘槸鑷姩鐨? 濡備笅闈㈣繖孌典唬鐮?br />銆銆銆銆a = {}
銆銆銆銆a["x"] = 10
銆銆銆銆b = a銆銆銆-- `b' refers to the same table as `a'
銆銆銆銆print(b["x"])銆--> 10
銆銆銆銆b["x"] = 20
銆銆銆銆print(a["x"])銆--> 20
銆銆銆銆a = nil銆銆-- now only `b' still refers to the table
銆銆銆銆b = nil銆銆-- now there are no references left to the table
銆銆b鍜宎閮芥寚鍚戠浉鍚岀殑table, 鍙崰鐢ㄤ竴鍧楀唴瀛? 褰撴墽琛屽埌a = nil鏃? b浠嶇劧鎸囧悜table,
銆銆鑰屽綋鎵ц鍒癰=nil鏃? 鍥犱負娌℃湁鎸囧悜table鐨勫彉閲忎簡, 鎵浠ua浼氳嚜鍔ㄩ噴鏀総able鎵鍗犲唴瀛?br />銆銆
銆銆3.Table鐨勫祵濂?/b>
銆銆Table鐨勪嬌鐢ㄨ繕鍙互宓屽錛屽涓嬩緥
銆銆渚媏06.lua
銆銆-- Table 鈥榗onstructor鈥?br />銆銆myPolygon = {
銆銆color=鈥渂lue鈥?
銆銆thickness=2,
銆銆npoints=4;
銆銆{x=0,銆 y=0},
銆銆{x=-10, y=0},
銆銆{x=-5,銆y=4},
銆銆{x=0,銆 y=4}
銆銆}
銆銆
銆銆-- Print the color
銆銆print(myPolygon[鈥渃olor鈥漖)
銆銆
銆銆-- Print it again using dot
銆銆-- notation
銆銆print(myPolygon.color)
銆銆
銆銆-- The points are accessible
銆銆-- in myPolygon[1] to myPolygon[4]
銆銆
銆銆-- Print the second point鈥檚 x
銆銆-- coordinate
銆銆print(myPolygon[2].x)
銆銆
銆銆紼嬪簭璇存槑
銆銆棣栧厛寤虹珛涓涓猼able, 涓庝笂涓渚嬩笉鍚岀殑鏄紝鍦╰able鐨刢onstructor閲岄潰鏈墈x=0,y=0},
銆銆榪欐槸浠涔堟剰鎬濆憿錛?榪欏叾瀹炲氨鏄竴涓皬table, 瀹氫箟鍦ㄤ簡澶able涔嬪唴, 灝弔able鐨?br />銆銆table鍚嶇渷鐣ヤ簡.
銆銆鏈鍚庝竴琛宮yPolygon[2].x錛屽氨鏄ぇtable閲岄潰灝弔able鐨勮闂柟寮?
銆銆
鍥?鍑芥暟鐨勮皟鐢?/font>

1.涓嶅畾鍙傛暟
銆銆渚媏07.lua
銆銆-- Functions can take a
銆銆-- variable number of
銆銆-- arguments.
銆銆function funky_print (...)
銆銆for i=1, arg.n do
銆銆print("FuNkY: " .. arg[i])
銆銆end
銆銆end
銆銆
銆銆funky_print("one", "two")
銆銆
銆銆榪愯緇撴灉
銆銆FuNkY: one
銆銆FuNkY: two
銆銆
銆銆紼嬪簭璇存槑
銆銆* 濡傛灉浠?..涓哄弬鏁? 鍒欒〃紺哄弬鏁扮殑鏁伴噺涓嶅畾.
銆銆* 鍙傛暟灝嗕細鑷姩瀛樺偍鍒頒竴涓彨arg鐨則able涓?
銆銆* arg.n涓瓨鏀懼弬鏁扮殑涓暟. arg[]鍔犱笅鏍囧氨鍙互閬嶅巻鎵鏈夌殑鍙傛暟.
銆銆
銆銆
銆銆2.浠able鍋氫負鍙傛暟
銆銆渚媏08.lua
銆銆-- Functions with table
銆銆-- parameters
銆銆function print_contents(t)
銆銆for k,v in t do
銆銆print(k .. "=" .. v)
銆銆end
銆銆end
銆銆print_contents{x=10, y=20}
銆銆
銆銆榪愯緇撴灉
銆銆x=10
銆銆y=20
銆銆
銆銆紼嬪簭璇存槑
銆銆* print_contents{x=10, y=20}榪欏彞鍙傛暟娌″姞鍦嗘嫭鍙? 鍥犱負浠ュ崟涓猼able涓哄弬鏁扮殑鏃跺? 涓嶉渶瑕佸姞鍦嗘嫭鍙?br />銆銆* for k,v in t do 榪欎釜璇彞鏄table涓殑鎵鏈夊奸亶鍘? k涓瓨鏀懼悕縐? v涓瓨鏀懼?br />銆銆
銆銆
銆銆3.鎶奓ua鍙樻垚綾諱技XML鐨勬暟鎹弿榪拌璦
銆銆渚媏09.lua
銆銆function contact(t)
銆銆-- add the contact 鈥榯鈥? which is
銆銆-- stored as a table, to a database
銆銆end
銆銆
銆銆contact {
銆銆name = "Game Developer",
銆銆email = "hack@ogdev.net",
銆銆url = "http://www.ogdev.net",
銆銆quote = [[
銆銆There are
銆銆10 types of people
銆銆who can understand binary.]]
銆銆}
銆銆
銆銆contact {
銆銆-- some other contact
銆銆}
銆銆
銆銆紼嬪簭璇存槑
銆銆* 鎶奻unction鍜宼able緇撳悎, 鍙互浣縇ua鎴愪負涓縐嶇被浼糥ML鐨勬暟鎹弿榪拌璦
銆銆* e09涓璫ontact{...}, 鏄竴縐嶅嚱鏁扮殑璋冪敤鏂規硶, 涓嶈寮勬販浜?br />銆銆* [[...]]鏄〃紺哄琛屽瓧絎︿覆鐨勬柟娉?br />銆銆* 褰撲嬌鐢– API鏃舵縐嶆柟寮忕殑浼樺娍鏇存槑鏄? 鍏朵腑contact{..}閮ㄥ垎鍙互鍙﹀瀛樻垚涓閰嶇疆鏂囦歡
銆銆
銆銆4.璇曡瘯鐪?/b>
銆銆鎯蟲兂鐪嬪摢浜涘湴鏂瑰彲浠ョ敤鍒頒緥e09涓彁鍒扮殑閰嶇疆鏂規硶鍛紵
銆銆

浜?Lua涓嶤鐨勪氦浜?/strong>

1.綆浠?/b>
銆銆
銆銆Lua涓嶤/C++緇撳悎鏄緢绱у瘑鐨? Lua涓嶤++浜や簰鏄緩绔嬪湪Lua涓嶤鐨勫熀紜涓婄殑, 鎵
銆銆浠ュ伓鍏堜粠Lua涓嶤璁茶搗.
銆銆
銆銆姝e絎竴璁叉墍璇? 榪愯Lua紼嬪簭鎴栬呰璋冪敤Lua涓昏鏈変袱縐嶆柟寮?
銆銆* 閫氳繃鍛戒護琛屾墽琛?Lua"鍛戒護
銆銆* 閫氳繃Lua鐨凜搴?br />銆銆铏界劧姝ゅ墠鍋朵滑涓鐩寸敤絎竴縐嶆柟寮? 浣嗗伓瑕佸憡璇変綘, 閫氳繃Lua鐨凜搴撴墽琛屾墠鏄父鎴忎腑
銆銆甯哥敤鐨勬柟寮?
銆銆
銆銆2.Lua鐨凜搴?/b>
銆銆
銆銆Lua鐨凜搴撳彲浠ュ仛涓篠hared Library璋冪敤, 浣嗕竴鑸紑鍙戞父鎴忔椂浼氭妸Lua鐨勬墍鏈夋簮紼嬪簭
銆銆閮藉寘鍚湪鍐? 騫朵笉鎶奓ua緙栬瘧鎴愬叡浜簱鐨勫艦寮? 鍥犱負Lua紼嬪簭鍙湁100澶欿, 鑰屼笖鍑犱箮
銆銆鍙互鍦ㄤ換浣曠紪璇戝櫒涓婥lean Compile. 甯ua婧愮▼搴忕殑鍙︿竴涓ソ澶勬椂, 鍙互闅忔椂瀵筁ua
銆銆鏈韓榪涜鎵╁厖, 澧炲姞鍋朵滑鎵闇鐨勫姛鑳?
銆銆
銆銆Lua鐨凜搴撴彁渚涗竴緋誨垪API:
銆銆* 綆$悊鍏ㄥ眬鍙橀噺
銆銆* 綆$悊tables
銆銆* 璋冪敤鍑芥暟
銆銆* 瀹氫箟鏂板嚱鏁? 榪欎篃鍙互瀹屽叏鐢盋瀹炵幇
銆銆* 鍨冨溇鏀墮泦鍣℅arbage collector, 铏界劧Lua鍙互鑷姩榪涜, 浣嗗線寰涓嶆槸绔嬪嵆鎵ц鐨?
銆銆銆鎵浠ュ瀹炴椂鎬ц姹傛瘮杈冮珮鐨勭▼搴? 浼氳嚜宸辮皟鐢ㄥ瀮鍦炬敹闆嗗櫒
銆銆* 杞藉叆騫舵墽琛孡ua紼嬪簭, 榪欎篃鍙互鐢盠ua鑷韓瀹炵幇
銆銆* 浠諱綍Lua鍙互瀹炵幇鐨勫姛鑳? 閮藉彲浠ラ氳繃Lua鐨凜 API瀹炵幇, 榪欏浜庝紭鍖栫▼搴忕殑榪愯閫熷害
銆銆銆鏈夊府鍔? 緇忓父璋冪敤鐨勫叡鐢ㄧ殑Lua紼嬪簭鐗囨柇鍙互杞垚C紼嬪簭, 浠ユ彁楂樻晥鐜? 榪濴ua閮芥槸C鍐欑殑
銆銆銆榪樻湁浠涔圕涓嶈兘瀹炵幇鍛?
銆銆
銆銆3.Lua涓嶤闆嗘垚鐨勪緥瀛?/b>
銆銆渚媏10.c
銆銆/* A simple Lua interpreter. */
銆銆#include
銆銆#include
銆銆int main(int argc, char *argv[]) {
銆銆char line[BUFSIZ];
銆銆lua_State *L = lua_open(0);
銆銆while (fgets(line, sizeof(line), stdin) != 0)
銆銆lua_dostring(L, line);
銆銆lua_close(L);
銆銆return 0;
銆銆}
銆銆
銆銆緙栬瘧
銆銆Linux/Cygwin
銆銆* 鍏堢紪璇慙ua, 騫舵妸澶存枃浠舵斁鍏nclude璺緞
銆銆* gcc e10.c -llua -llualib -o e10
銆銆
銆銆VC6/VC2003
銆銆* 鍏堢紪璇慙ua, 鍦∣ption涓緗ご鏂囦歡鍜屽簱鏂囦歡璺緞
銆銆* 鏂板緩宸ョ▼,鍦ㄥ伐紼嬮厤緗腑鍔犲叆闄勫姞搴搇ua.lib鍜宭ualib.lib
銆銆* 緙栬瘧鎴恊xe
銆銆
銆銆榪愯緇撴灉
銆銆鏈▼搴忕殑鍔熻兘鏄疄鐜頒竴涓狶ua瑙i噴鍣? 杈撳叆鐨勬瘡琛屽瓧絎﹂兘浼氳瑙i噴鎴怢ua騫舵墽琛?
銆銆
銆銆紼嬪簭璇存槑
銆銆* #include 鍖呭惈lua澶存枃浠? 鐒跺悗鎵嶅彲浠ヤ嬌鐢ˋPI
銆銆* lua_State *L = lua_open(0) 鎵撳紑涓涓狶ua鎵ц鍣?br />銆銆* fgets(line, sizeof(line), stdin) 浠庢爣鍑嗚緭鍏ラ噷璇誨叆涓琛?br />銆銆* lua_dostring(L, line) 鎵ц姝よ
銆銆* lua_close(L) 鍏抽棴Lua鎵ц鍣?br />銆銆
銆銆
銆銆渚媏11.c
銆銆/* Another simple Lua interpreter. */
銆銆#include
銆銆#include
銆銆#include
銆銆int main(int argc, char *argv[]) {
銆銆char line[BUFSIZ];
銆銆lua_State *L = lua_open(0);
銆銆lua_baselibopen(L);
銆銆lua_iolibopen(L);
銆銆lua_strlibopen(L);
銆銆lua_mathlibopen(L);
銆銆while (fgets(line, sizeof(line), stdin) != 0)
銆銆lua_dostring(L, line);
銆銆lua_close(L);
銆銆return 0;
銆銆}
銆銆
銆銆榪愯緇撴灉
銆銆鏈▼搴忕殑鍔熻兘鏄疄鐜頒竴涓狶ua瑙i噴鍣? 杈撳叆鐨勬瘡琛屽瓧絎﹂兘浼氳瑙i噴鎴怢ua騫舵墽琛?
銆銆涓庝笂渚嬩笉鍚岀殑鏄? 鏈緥璋冪敤浜哃ua鐨勪竴浜涙爣鍑嗗簱.
銆銆
銆銆紼嬪簭璇存槑
銆銆* #include 鍖呭惈Lua鐨勬爣鍑嗗簱
銆銆* 浠ヤ笅榪欏嚑琛屾槸鐢ㄦ潵璇誨叆Lua鐨勪竴浜涘簱, 榪欐牱鍋朵滑鐨凩ua紼嬪簭灝卞彲浠ユ湁鏇村鐨勫姛鑳?
銆銆lua_baselibopen(L);
銆銆lua_iolibopen(L);
銆銆lua_strlibopen(L);
銆銆lua_mathlibopen(L);
銆銆
銆銆4.璇曡瘯鐪?/b>
銆銆鎶婁笂闈袱涓皬渚嬪瓙鍦ㄤ綘鐔熸倝鐨勭紪璇戝櫒涓紪璇戞墽琛? 騫惰瘯璇曡兘鍚︿笌Lua婧愮爜鏍戜竴璧風紪璇?br />
鍏?C/C++涓敤Lua鍑芥暟

1.綆浠?br />銆銆鍋朵滑榪欐涓昏璇磋鎬庝箞鐢盠ua瀹氫箟鍑芥暟, 鐒跺悗鍦–鎴栬匔++涓皟鐢? 榪欓噷鍋朵滑
銆銆鏆備笉娑夊強C++鐨勫璞¢棶棰? 鍙璁鴻皟鐢ㄥ嚱鏁扮殑鍙傛暟, 榪斿洖鍊煎拰鍏ㄥ眬鍙橀噺鐨勪嬌鐢?

銆銆2.紼嬪簭
銆銆榪欓噷鍋朵滑鍦╡12.lua閲屽厛瀹氫箟涓涓畝鍗曠殑add(), x,y涓哄姞娉曠殑涓や釜鍙傛暟,
銆銆return 鐩存帴榪斿洖鐩稿姞鍚庣殑緇撴灉.
銆銆
銆銆渚媏12.lua
銆銆-- add two numbers
銆銆function add ( x, y )
銆銆return x + y
銆銆end
銆銆
銆銆鍦ㄥ墠涓嬈¢噷, 鍋朵滑璇村埌 lua_dofile() 鍙互鐩存帴鍦–涓墽琛宭ua鏂囦歡. 鍥犱負鍋朵滑
銆銆榪欎釜紼嬪簭閲屽彧瀹氫箟浜嗕竴涓猘dd()鍑芥暟, 鎵浠ョ▼搴忔墽琛屽悗騫朵笉鐩存帴緇撴灉, 鏁堟灉鐩稿綋
銆銆浜庡湪C涓畾涔変簡涓涓嚱鏁頒竴鏍?
銆銆
銆銆Lua鐨勫嚱鏁板彲浠ユ湁澶氫釜鍙傛暟, 涔熷彲浠ユ湁澶氫釜榪斿洖鍊? 榪欓兘鏄敱鏍?stack)瀹炵幇鐨?
銆銆闇瑕佽皟鐢ㄤ竴涓嚱鏁版椂, 灝辨妸榪欎釜鍑芥暟鍘嬪叆鏍? 鐒跺悗欏哄簭鍘嬪叆鎵鏈夊弬鏁? 鐒跺悗鐢?br />銆銆lua_call()璋冪敤榪欎釜鍑芥暟. 鍑芥暟榪斿洖鍚? 榪斿洖鍊間篃鏄瓨鏀懼湪鏍堜腑. 榪欎釜榪囩▼鍜?br />銆銆姹囩紪鎵ц鍑芥暟璋冪敤鐨勮繃紼嬫槸涓鏍風殑.
銆銆
銆銆渚媏13.cpp 鏄竴涓皟鐢ㄤ笂闈㈢殑Lua鍑芥暟鐨勪緥瀛?br />銆銆#include
銆銆
銆銆extern "C" { // 榪欐槸涓狢++紼嬪簭, 鎵浠ヨextern "C",
銆銆銆銆 // 鍥犱負lua鐨勫ご鏂囦歡閮芥槸C鏍煎紡鐨?br />銆銆#include "lua.h"
銆銆#include "lualib.h"
銆銆#include "lauxlib.h"
銆銆}
銆銆
銆銆/* the Lua interpreter */
銆銆lua_State* L;
銆銆
銆銆int luaadd ( int x, int y )
銆銆{
銆銆int sum;
銆銆
銆銆/* the function name */
銆銆lua_getglobal(L, "add");
銆銆
銆銆/* the first argument */
銆銆lua_pushnumber(L, x);
銆銆
銆銆/* the second argument */
銆銆lua_pushnumber(L, y);
銆銆
銆銆/* call the function with 2
銆銆銆 arguments, return 1 result */
銆銆lua_call(L, 2, 1);
銆銆
銆銆/* get the result */
銆銆sum = (int)lua_tonumber(L, -1);
銆銆lua_pop(L, 1);
銆銆
銆銆return sum;
銆銆}
銆銆
銆銆int main ( int argc, char *argv[] )
銆銆{
銆銆int sum;
銆銆
銆銆/* initialize Lua */
銆銆L = lua_open();
銆銆
銆銆/* load Lua base libraries */
銆銆lua_baselibopen(L);
銆銆
銆銆/* load the script */
銆銆lua_dofile(L, "e12.lua");
銆銆
銆銆/* call the add function */
銆銆sum = luaadd( 10, 15 );
銆銆
銆銆/* print the result */
銆銆printf( "The sum is %d\n", sum );
銆銆
銆銆/* cleanup Lua */
銆銆lua_close(L);
銆銆
銆銆return 0;
銆銆}
銆銆
銆銆紼嬪簭璇存槑:
銆銆main涓繃紼嬪伓浠笂嬈″凡緇忚榪囦簡, 鎵浠ヨ繖嬈″彧璇磋luaadd鐨勮繃紼?br />銆銆* 棣栧厛鐢╨ua_getglobal()鎶奱dd鍑芥暟鍘嬫爤
銆銆* 鐒跺悗鐢╨ua_pushnumber()渚濇鎶妜,y鍘嬫爤
銆銆* 鐒跺悗璋冪敤lua_call(), 騫朵笖鍛婅瘔紼嬪簭鍋朵滑鏈変袱涓弬鏁頒竴涓繑鍥炲?br />銆銆* 鎺ョ潃鍋朵滑浠庢爤欏跺彇鍥炶繑鍥炲? 鐢╨ua_tonumber()
銆銆* 鏈鍚庡伓浠敤lua_pop()鎶婅繑鍥炲兼竻鎺?br />銆銆
銆銆榪愯緇撴灉:
銆銆The sum is 25
銆銆
銆銆緙栬瘧鏂規硶
銆銆Linux涓嬫妸紼嬪簭瀛樻垚e13.cpp
銆銆g++ e13.cpp -llua -llualib -o e13
銆銆./e13
銆銆
銆銆VC涓嬬紪璇戞柟娉?br />銆銆* 棣栧厛寤虹珛涓涓┖鐨刉in32 Console Application Project
銆銆* 鎶奺13.cpp鍔犲叆宸ョ▼涓?br />銆銆* 鐐筽roject setting,鐒跺悗璁劇疆link閫夐」, 鍐嶅姞涓妉ua.lib lualib.lib涓や釜棰濆鐨勫簱
銆銆* 鏈鍚庣紪璇?br />銆銆
銆銆寤虹珛濂界殑project鍙互鍦ㄨ繖閲屼笅杞?br />銆銆VC http://tonyandpaige.com/tutorials/luaadd.zip
銆銆Linux http://tonyandpaige.com/tutorials/luaadd.tar.gz
銆銆
銆銆3.鍏ㄥ眬鍙橀噺
銆銆涓婇潰鍋朵滑鐢ㄥ埌浜唋ua_getglobal()浣嗗茍娌℃湁璇︾粏璁? 榪欓噷鍋朵滑鍐嶄婦涓や釜灝忎緥瀛愭潵璇翠笅鍏ㄥ眬鍙橀噺
銆銆lua_getglobal()鐨勪綔鐢ㄥ氨鏄妸lua涓叏灞鍙橀噺鐨勫煎帇鍏ユ爤
銆銆lua_getglobal(L, "z");
銆銆z = (int)lua_tonumber(L, 1);
銆銆lua_pop(L, 1);
銆銆鍋囪Lua紼嬪簭涓畾涔変簡涓涓叏灞鍙橀噺z, 榪欐灝忕▼搴忓氨鏄妸z鐨勫煎彇鍑烘斁鍏鐨勫彉閲弞涓?
銆銆
銆銆鍙﹀Lua涓繕鏈変竴涓搴旂殑鍑芥暟lua_setglobal(), 浣滅敤鏄敤鏍堥《鐨勫煎~鍏呮寚瀹氱殑鍏ㄥ眬鍙橀噺
銆銆lua_pushnumber(L, 10);
銆銆lua_setglobal(L, "z");
銆銆渚嬪榪欐灝忕▼搴忓氨鏄妸lua涓殑鍏ㄥ眬鍙橀噺z璁句負10, 濡傛灉lua涓湭瀹氫箟z鐨勮瘽, 灝變細鑷姩鍒涘緩涓涓?br />銆銆鍏ㄥ眬鍙橀噺z騫惰涓?0.
銆銆
銆銆4.璇曡瘯鐪?/b>
銆銆鑷繁鍐欎釜鍑芥暟鐢–/C++鏉ヨ皟鐢ㄤ笅璇曡瘯

涓?璋冪敤C/C++鍑芥暟

1.鍓嶈█
銆銆涓婃鍋惰鍒頒粠C/C++涓皟鐢↙ua鐨勫嚱鏁? 鐒跺悗灝辨湁鏈嬪弸闂粠Lua涓浣曡皟鐢–/C++鐨?br />銆銆鍑芥暟, 鎵浠ュ伓浠繖嬈″氨鏉ヨ璇磋繖涓棶棰? 棣栧厛鍋朵滑浼氬湪C++涓緩绔嬩竴涓嚱鏁? 鐒跺悗
銆銆鍛婄煡Lua鏈夎繖涓嚱鏁? 鏈鍚庡啀鎵ц瀹? 鍙﹀, 鐢變簬鍑芥暟涓嶆槸鍦↙ua涓畾涔夌殑, 鎵浠?br />銆銆鏃犳硶紜畾鍑芥暟鐨勬紜? 鍙兘鍦ㄨ皟鐢ㄨ繃紼嬩腑浼氬嚭閿? 鍥犳鍋朵滑榪樹細璇磋Lua鍑洪敊澶?br />銆銆鐞嗙殑闂.
銆銆
銆銆2.Lua涓皟鐢–鍑芥暟
銆銆鍦╨ua涓槸浠ュ嚱鏁版寚閽堢殑褰㈠紡璋冪敤鍑芥暟, 騫朵笖鎵鏈夌殑鍑芥暟鎸囬拡閮藉繀欏繪弧瓚沖涓嬫縐?br />銆銆綾誨瀷:
銆銆typedef int (*lua_CFunction) (lua_State *L);
銆銆
銆銆涔熷氨鏄, 鍋朵滑鍦–++涓畾涔夊嚱鏁版椂蹇呴』浠ua_State涓哄弬鏁? 浠nt涓鴻繑鍥炲兼墠鑳?br />銆銆琚獿ua鎵璋冪敤. 浣嗘槸涓嶈蹇樿浜? 鍋朵滑鐨刲ua_State鏄敮鎸佹爤鐨? 鎵浠ラ氳繃鏍堝彲浠?br />銆銆浼犻掓棤絀蜂釜鍙傛暟, 澶у皬鍙彈鍐呭瓨澶у皬闄愬埗. 鑰岃繑鍥炵殑int鍊間篃鍙槸鎸囪繑鍥炲肩殑涓暟
銆銆鐪熸鐨勮繑鍥炲奸兘瀛樺偍鍦╨ua_State鐨勬爤涓? 鍋朵滑閫氬父鐨勫仛娉曟槸鍋氫竴涓獁rapper, 鎶?br />銆銆鎵鏈夐渶瑕佽皟鐢ㄧ殑鍑芥暟閮絯rap涓涓? 榪欐牱灝卞彲浠ヨ皟鐢ㄤ換鎰忕殑鍑芥暟浜?
銆銆
銆銆涓嬮潰榪欎釜渚嬪瓙鏄竴涓狢++鐨刟verage()鍑芥暟, 瀹冨皢灞曠ず濡備綍鐢ㄥ涓弬鏁板茍榪斿洖澶氫釜鍊?br />銆銆
銆銆渚媏14.cpp
銆銆#include
銆銆
銆銆extern "C" {
銆銆#include "lua.h"
銆銆#include "lualib.h"
銆銆#include "lauxlib.h"
銆銆}
銆銆
銆銆/* the Lua interpreter */
銆銆lua_State* L;
銆銆
銆銆static int average(lua_State *L)
銆銆{
銆銆/* get number of arguments */
銆銆int n = lua_gettop(L);
銆銆double sum = 0;
銆銆int i;
銆銆
銆銆/* loop through each argument */
銆銆for (i = 1; i <= n; i++)
銆銆{
銆銆/* total the arguments */
銆銆sum += lua_tonumber(L, i);
銆銆}
銆銆
銆銆/* push the average */
銆銆lua_pushnumber(L, sum / n);
銆銆
銆銆/* push the sum */
銆銆lua_pushnumber(L, sum);
銆銆
銆銆/* return the number of results */
銆銆return 2;
銆銆}
銆銆
銆銆int main ( int argc, char *argv[] )
銆銆{
銆銆/* initialize Lua */
銆銆L = lua_open();
銆銆
銆銆/* load Lua base libraries */
銆銆lua_baselibopen(L);
銆銆
銆銆/* register our function */
銆銆lua_register(L, "average", average);
銆銆
銆銆/* run the script */
銆銆lua_dofile(L, "e15.lua");
銆銆
銆銆/* cleanup Lua */
銆銆lua_close(L);
銆銆
銆銆return 0;
銆銆}
銆銆
銆銆渚媏15.lua
銆銆-- call a C++ function
銆銆
銆銆avg, sum = average(10, 20, 30, 40, 50)
銆銆
銆銆print("The average is ", avg)
銆銆print("The sum is ", sum)
銆銆
銆銆
銆銆紼嬪簭璇存槑:
銆銆* lua_gettop()鐨勪綔鐢ㄦ槸榪斿洖鏍堥《鍏冪礌鐨勫簭鍙? 鐢變簬Lua鐨勬爤鏄粠1寮濮嬬紪鍙風殑,
銆銆銆鎵浠ユ爤欏跺厓绱犵殑搴忓彿涔熺浉褰撲簬鏍堜腑鐨勫厓绱犱釜鏁? 鍦ㄨ繖閲? 鏍堜腑鍏冪礌鐨勪釜鏁板氨
銆銆銆鏄紶鍏ョ殑鍙傛暟涓暟.
銆銆* for寰幆璁$畻鎵鏈変紶鍏ュ弬鏁扮殑鎬誨拰. 榪欓噷鐢ㄥ埌浜嗘暟鍊艱漿鎹ua_tonumber().
銆銆* 鐒跺悗鍋朵滑鐢╨ua_pushnumber()鎶婂鉤鍧囧煎拰鎬誨拰push鍒版爤涓?
銆銆* 鏈鍚? 鍋朵滑榪斿洖2, 琛ㄧず鏈変袱涓繑鍥炲?
銆銆* 鍋朵滑铏界劧鍦–++涓畾涔変簡average()鍑芥暟, 浣嗗伓浠殑Lua紼嬪簭騫朵笉鐭ラ亾, 鎵浠ラ渶
銆銆銆瑕佸湪main鍑芥暟涓姞鍏?br />銆銆
銆銆銆 /* register our function */
銆銆lua_register(L, "average", average);
銆銆
銆銆銆榪欎袱琛岀殑浣滅敤灝辨槸鍛婅瘔e15.lua鏈塧verage()榪欐牱涓涓嚱鏁?
銆銆* 榪欎釜紼嬪簭鍙互瀛樻垚cpp涔熷彲浠ュ瓨鎴恈, 濡傛灉浠?c涓烘墿灞曞悕灝變笉闇瑕佸姞extern "C"
銆銆
銆銆緙栬瘧鐨勬柟娉曞伓浠笂嬈¤榪囦簡, 鏂規硶鐩稿悓.
銆銆e15.lua鎵ц鐨勬柟娉曞彧鑳界敤涓婁緥涓殑C++涓墽琛? 鑰屼笉鑳界敤鍛戒護琛屾柟寮忔墽琛?
銆銆
銆銆3.閿欒澶勭悊
銆銆鍦ㄤ笂渚嬩腑, 鍋朵滑娌℃湁瀵逛紶鍏ョ殑鍙傛暟鏄惁涓烘暟瀛楄繘琛屾嫻? 榪欐牱鍋氫笉濂? 鎵浠ヨ繖閲屽伓
銆銆浠啀鍔犱笂閿欒澶勭悊鐨勭墖鏂?
銆銆
銆銆鎶婅繖孌靛姞鍦╢or寰幆涔嬪唴:
銆銆if (!lua_isnumber(L, i)) {
銆銆lua_pushstring(L, "Incorrect argument to 'average'");
銆銆lua_error(L);
銆銆}
銆銆榪欐鐨勪綔鐢ㄥ氨鏄嫻嬩紶鍏ョ殑鏄惁涓烘暟瀛?
銆銆
銆銆鍔犱笂榪欐涔嬪悗, 鍋朵滑debug鐨勬椂鍊欏氨浼氱畝鍗曡澶? 瀵逛簬緇撳悎涓ょ璇█鐨勭紪紼? 瀹冧滑涔?br />銆銆闂翠紶閫掓暟鎹殑姝g‘鎬ф嫻嬫槸闈炲父閲嶈鐨?
銆銆
銆銆榪欓噷鏈夊埆浜哄啓濂界殑渚嬪瓙:
銆銆VC鐨?http://tonyandpaige.com/tutorials/luaavg.zip
銆銆Linux鐨?http://tonyandpaige.com/tutorials/luaavg.tar.gz
銆銆


]]>
銆愯漿璐淬戝浣曞湪C++涓泦鎴怢UA鑴氭湰(LuaWrapper For C++綃?http://m.shnenglu.com/mybios/archive/2006/11/18/15339.html鏉庨敠淇?mybios)鏉庨敠淇?mybios)Sat, 18 Nov 2006 02:00:00 GMThttp://m.shnenglu.com/mybios/archive/2006/11/18/15339.htmlhttp://m.shnenglu.com/mybios/comments/15339.htmlhttp://m.shnenglu.com/mybios/archive/2006/11/18/15339.html#Feedback5http://m.shnenglu.com/mybios/comments/commentRss/15339.htmlhttp://m.shnenglu.com/mybios/services/trackbacks/15339.html浣滆咃細 娌愭灚 錛堢浜屼漢鐢熸垚鍛橈級
鐗堟潈鎵鏈夎漿杞借娉ㄦ槑鍘熷嚭澶?br />涓婚〉錛氱浜屼漢鐢?http://www.d2-life.com
銆銆銆http://www.d2-life.com/LBS/blogview.asp?logID=41

涓轟粈涔堣鐢↙ua浣滆剼鏈紵
銆銆浣跨敤Lua浣滆剼鏈紝涓昏鏄洜涓哄畠灝忓閥鐜茬彂錛堜綋縐皬錛岃繍琛屽揩錛夛紝鑰屼笖瀹冪殑璇硶鍙堟瘮杈冪畝鍗曟槑浜嗐備笉榪囷紝浣跨敤LuaAPI灝哃ua寮曟搸闆嗘垚鍒扮▼搴忎腑錛岀‘瀹炴湁涓浜涗笉鏂逛究鈥斺旂敤钀芥湪闅忛緗戝弸鐨勮瘽鏉ヨ錛屽氨鏄?灝辮薄鐢ㄦ眹緙?銆傚綋鐒訛紝鐜板湪浣犱笉鐢ㄥ啀榪欎箞杈涜嫤浜嗭紝鍥犱負浣犲彲浠ヤ嬌鐢↙uaWrapper For C++銆備嬌鐢ㄨ繖涓伐鍏鳳紝鍦–++涓泦鎴怢ua鑴氭湰灝辨槸杞昏屾槗涓劇殑浜嬨備綘鍘熸湁鐨凜++鍑芥暟鍜岀被錛屽嚑涔庝笉闇瑕佷換浣曟敼鍙橈紝灝卞彲浠ヤ笌Lua鑴氭湰鍏變韓銆?br />銆銆鎴戜滑鎺ヤ笅鏉ワ紝鐢ㄥ疄渚嬫潵璇存槑錛屽浣曠敤LuaWrapper鏉ラ泦鎴怢ua鑴氭湰鍒頒綘鐨勭▼搴忎腑鍘匯?br />
1.聽聽鍒涘緩Lua寮曟搸
銆銆LuaWrap lua; 鎴栬?LuaWrap* lua = new LuaWrap;
銆銆鍒涘緩涓涓狶uaWrap瀵硅薄錛屽氨鏄垱寤轟竴涓狶ua鑴氭湰寮曟搸銆傚茍涓旀牴鎹甃ua鐨勭壒鎬э紝浣犲彲浠ュ垱寤轟換鎰忓涓狶ua寮曟搸錛岀敋鑷沖彲浠ュ垎甯冨湪涓嶅悓鐨勭嚎紼嬪綋涓?br />
2.聽聽瑁呰澆騫舵墽琛岃剼鏈▼搴?br />銆銆浣犲彲浠ヤ粠緙撳啿鍖轟腑瑁呰澆Lua鑴氭湰錛?br />銆銆lua.LoadString(
銆銆銆銆"print('Hello World')"
銆銆);
銆銆褰撶劧錛屼綘涔熷彲浠ヤ粠鏂囦歡涓鍏ワ紝騫舵墽琛孡ua鑴氭湰錛?br />銆銆Lua.LoadFile("./test.lua");
銆銆Lua鐨勮剼鏈紝鍙互鏄簮浠g爜錛屼篃鍙互緇忚繃緙栬瘧鍚庣殑涓棿浠g爜銆備篃璁鎬綘瀵圭紪璇戝悗鐨勪腑闂翠唬鐮佹洿鎰熷叴瓚b斺斿鏋滀綘涓嶅笇鏈涜婧愪唬鐮佽丹瑁歌8鐨勮闇插湪澶у鐨勭溂鍓嶃?br />
3.聽聽鑾峰彇鍜岃緗甃ua鍙橀噺
銆銆鑳藉鑾峰彇鍜岃緗剼鏈彉閲忕殑鍐呭錛屾槸涓涓渶鍩烘湰鐨勫姛鑳姐備綘鍙互浣跨敤GetGlobal鍜孲etGlobal鍑芥暟鏉ュ仛鍒拌繖涓鐐癸細
銆銆(1)聽聽鑾峰彇鍙橀噺錛?br />銆銆銆銆int a = lua.GetGlobal<int>("a");
銆銆銆銆LuaTable table = lua.GetGlobal<LuaTable>("t");
銆銆銆銆榪欓噷錛?lt;> 閲屽ご鐨勭被鍨嬶紝灝辨槸鎯寵鐨勫彉閲忕殑綾誨瀷銆?br />銆銆(2)聽聽璁劇疆鍙橀噺錛?br />銆銆銆銆lua.SetGlobal("a", a);
銆銆銆銆lua.SetGlobal("t", table);

4.聽聽璋冪敤Lua鍑芥暟
銆銆浣跨敤Call鍑芥暟錛屽氨鍙互寰堢畝鍗曠殑浠庝綘鐨勭▼搴忎腑璋冪敤Lua鍑芥暟錛?br />銆銆lua.Call<void>("print", "Hello World");
銆銆int sum = lua.Call<int>("add", 2, 3);
銆銆榪欓噷錛?lt;> 閲屽ご鐨勭被鍨嬫槸榪斿洖鍊肩殑綾誨瀷銆?br />
5.聽聽濡備綍璁㎜ua涔熻兘璋冪敤C++鐨勫嚱鏁?br />銆銆綺鵑噰鐨勫湴鏂規潵浜嗐傚亣濡傛湁涓嬮潰榪欐牱鐨勪竴涓嚱鏁幫細
銆銆int add(int a, int b)
銆銆{
銆銆銆銆return a + b;
銆銆}
銆銆濡傛灉鎯寵瀹冭兘澶熻Lua浣跨敤錛屽彧闇灝嗗畠娉ㄥ唽鍒癓ua寮曟搸褰撲腑灝卞彲浠ヤ簡錛?br />銆銆lua.RegisterFunc("add", int(int,int), add);
銆銆榪欐牱錛孡ua涓氨鍙互鐢ㄧ洿鎺ヤ嬌鐢ㄤ簡錛?br />銆銆錛圠ua鑴氭湰錛塻um = add(1, 3)

銆銆(*) RegisterFunc鐨勫姛鑳斤紝灝辨槸璁╀綘鎶奀++鐨勫嚱鏁版敞鍐屽埌Lua涓紝渚汱ua鑴氭湰浣跨敤銆?br />銆銆銆銆絎竴涓弬鏁幫紝鏄兂瑕佸湪Lua涓敤鐨勫嚱鏁板悕銆?br />銆銆銆銆絎簩涓弬鏁幫紝鏄疌++涓嚱鏁扮殑鍘熷瀷錛?C++鍏佽鍑芥暟閲嶈澆鐨勶紝浣犲彲浠ヤ嬌鐢ㄥ嚱鏁板師鍨嬶紝鏉ラ夋嫨闇瑕佹敞鍐屽埌Lua寮曟搸涓殑閭d釜鍑芥暟銆?br />銆銆銆銆絎笁涓弬鏁幫紝灝辨槸C++涓嚱鏁扮殑鎸囬拡浜嗐?br />
6.聽聽濡備綍鑳借C++鐨勭被鍦↙ua涓嬌鐢?br />銆銆鎴戜滑鍏堢湅鐪嬩笅闈㈣繖涓狢++綾伙細
class MyArray
{
聽聽std::vector<double> array;
public:
聽聽void setvalue(int index, double value);
聽聽double getvalue(int index);
聽聽int size();
聽聽const char* ToString();
};

銆銆浣犲噯澶囪璁㎜ua鑳藉鑷敱璁塊棶騫舵搷浣滆繖涓被銆傚緢綆鍗曪紝浣犲彧闇澧炲姞鍑犱釜瀹忓畾涔夊氨鍙互浜嗭細

class MyArray
{
聽聽std::vector<double> array;
public:
聽聽void setvalue(int index, double value);
聽聽double getvalue(int index);
聽聽int size();
聽聽const char* ToString();
聽聽// 灝嗕竴涓?class 浣滀負涓涓?Lua 瀵硅薄鏄緢瀹規槗鐨勶紝鍙渶瑕佸鍔犱互涓嬪畯瀹氫箟銆?br />聽聽DEFINE_TYPENAME("My.array");
聽聽BEGIN_REGLUALIB("array")
聽聽聽聽聽聽LUALIB_ITEM_create("new", MyArray )聽聽// 鍒涘緩MyArray (娉細鐢變簬鍙戣〃鐨勫師鍥狅紝create搴斾負鍏ㄩ儴澶у啓)
聽聽聽聽聽聽LUALIB_ITEM_DESTROY("del", MyArray )聽聽// 娑堥櫎MyArray銆?br />聽聽END_REGLUALIB()
聽聽BEGIN_REGLUALIB_MEMBER()
聽聽聽聽LUALIB_ITEM_FUNC("size", int (MyArray*), &MyArray::size)
聽聽聽聽LUALIB_ITEM_FUNC("__getindex", double(MyArray*, int), &MyArray::getvalue)聽聽
聽聽聽聽LUALIB_ITEM_FUNC("__newindex", void (MyArray*, int, double), &MyArray::setvalue)
聽聽聽聽LUALIB_ITEM_FUNC("__tostring", const char* (MyArray*), &MyArray::ToString)
聽聽聽聽LUALIB_ITEM_DESTROY("__gc", MyArray ) 聽聽// 鍨冨溇鏀墮泦鏃舵秷闄ゅ璞$敤銆?br />聽聽END_REGLUALIB_MEMBER()
};

銆銆鍙鏈変簡榪欎簺瀹忓畾涔夛紝榪欎釜綾誨氨鏄彲浠ュ湪Lua涓嬌鐢ㄧ殑綾諱簡錛屾垜浠氨鍙互鍦↙ua涓敞鍐岃繖涓被浜嗭細
銆銆lua.Register<MyArray>()

銆銆榪欐牱娉ㄥ唽浠ュ悗錛屾垜浠湪Lua涓氨鍙互浣跨敤榪欎釜綾諱簡錛?br />銆銆a = array.new()聽聽-- 鍒涘緩瀵硅薄錛岀浉褰撲簬 a = new Myarray
銆銆a[1] = 10聽聽-- 璋冪敤__newindex錛屼篃灝辨槸C++涓殑 a->setvalue(1, 10)
銆銆a[2] = 20聽聽-- 璋冪敤__newindex錛屼篃灝辨槸C++涓殑 a->setvalue(2, 20)
銆銆print(
銆銆銆銆a,聽聽-- 璋冪敤 __tostring錛屼篃灝辨槸C++涓殑 a->ToString()
銆銆銆銆a:size(), -- 鐩稿綋浜嶤++涓殑 a->size()
銆銆銆銆a[1], -- 璋冪敤__getindex錛屼篃灝辨槸C++涓殑a->getvalue(1)
銆銆銆銆a[2]) --璋冪敤__getindex錛屼篃灝辨槸C++涓殑a->getvalue(2)
銆銆array.del(a)聽聽-- 娓呴櫎瀵硅薄錛岀浉褰撲簬 delete a
銆銆a = nil聽聽-- 娓呯┖ a錛屽緢璞++涓殑 a = NULL

銆銆褰撶劧錛屼綘涔熷彲浠ヤ笉鐢╠el榪欎釜瀵硅薄錛岃屾槸絳夊緟Lua甯綘鑷姩榪涜鍨冨溇鍥炴敹銆傚湪Lua榪涜鍨冨溇鍥炴敹鏃訛紝瀹冧細鑷姩璋冪敤榪欎釜瀵硅薄鐨?__gc 錛岀浉褰撲簬 delete銆?br />
銆銆閭d箞錛屽湪C++涓鍒涘緩MyArray瀵硅薄錛屽茍涓斾紶閫掔粰Lua鍏ㄥ眬鍙橀噺鎬庝箞鍔烇紵灝辮薄鍓嶉潰璁茶繃鐨勪竴鏍鳳紝浣跨敤SetGlobal錛?br />銆銆MyArray* a = new MyArray;
銆銆lua.SetGlobal("a", a);
銆銆瑕佽幏鍙栬瀵硅薄錛屽悓鏍風殑錛屽簲璇ヤ嬌鐢℅etGlobal錛?br />銆銆MyArray* a = lua.GetGlobal<MyArray>("a");
銆銆
銆銆瀵逛簬浼犻掔粰Lua鐨勫璞★紝灝辮Lua鏉ョ鐞嗚瀵硅薄鐨勭敓瀛樺懆鏈熷ソ浜嗐傚鏋滀綘闈炶鍒犻櫎瀹冪殑璇濓紝浣犲彲浠ヤ嬌鐢―elGlobalObject錛?br />銆銆lua.DelGlobalObject<MyArray>("a");
銆銆涓嶈繃榪欎箞鍋氱殑璇濓紝浣犲簲褰撴槑鐧戒綘鍦ㄥ仛浠涔堬紝鍥犱負鍦↙ua鐨勮剼鏈腑錛屽彲鑳藉凡緇忓湪澶氬寮曠敤浜嗚繖涓璞′簡銆傚垹闄や簡鍏朵腑涓涓紝灝嗗鑷村叾瀹冨紩鐢ㄥ璞″け鏁堬紝浠庤屽彲鑳藉紩鑷寸郴緇熷穿婧冦?br />
銆銆(1)聽聽DEFINE_TYPENAME("My.array");
銆銆銆銆瀹氫箟綾誨瀷鐨勫悕縐般傚湪Lua涓紝榪欎釜綾誨瀷鍚嶇О鏄敮涓鐢ㄦ潵璇嗗埆C++綾誨瀷鐨勶紝浣犲繀欏諱負涓嶅悓鐨勫璞$粰浜堜笉鍚岀殑鍚嶇О銆?br />
銆銆(2)聽聽BEGIN_REGLUALIB("array") 鈥?END_REGLUALIB()
銆銆銆銆浣犲彲浠ヤ負涓涓璞″畾涔変竴涓▼搴忓簱錛?array"灝辨槸紼嬪簭搴撶殑鍚嶅瓧銆傚湪紼嬪簭搴撲腑瀹氫箟鐨勫嚱鏁版槸鍏ㄥ眬鍑芥暟錛屽湪Lua涓紝浣跨敤璇ュ嚱鏁幫紝闇瑕佸湪鍑芥暟鍓嶅姞涓婂簱鐨勫悕瀛楋紝濡傦細array.new錛堬級銆傞氬父錛岀▼搴忓簱浼氬寘鍚垱寤哄璞$殑鏂規硶銆傚錛?br />銆銆銆銆LUALIB_ITEM_create("new", MyArray )聽聽// 鍒涘緩MyArray (娉細鐢變簬鍙戣〃鐨勫師鍥狅紝create搴斾負鍏ㄩ儴澶у啓)
銆銆銆銆榪欐牱瀛愶紝浣犳墠鑳藉湪Lua涓垱寤篗yArray錛?br />銆銆銆銆a = array.new()
銆銆
銆銆銆銆浣犱篃鍙互閫夋嫨澧炲姞涓涓垹闄ゅ璞℃搷浣滐細
銆銆銆銆LUALIB_ITEM_DESTROY("del", MyArray ) 聽聽// 鍒犻櫎MyArray
銆銆銆銆榪欐牱錛屼綘灝卞彲浠ョ洿鎺ュ垹闄や竴涓璞′簡錛?br />銆銆銆銆array.del(a)

銆銆(3)聽聽BEGIN_REGLUALIB_MEMBER() 鈥ND_REGLUALIB_MEMBER()
銆銆銆銆鍦ㄦ澶勶紝浣犲彲浠ュ畾涔夊璞$殑鎴愬憳鍑芥暟錛屼篃鍙互閲嶈澆瀵硅薄鐨勬搷浣滅鈥斺旀槸鐨勶紝灝辮薄C++鐨刼perator閲嶈澆銆備緥濡傦細
銆銆銆銆LUALIB_ITEM_FUNC("__newindex", void (MyArray*, int, double), &MyArray::setvalue)
銆銆銆銆灝辨槸閲嶈澆 operator[] 鎿嶄綔絎︺侺ua涓彲閲嶈澆鐨勬搷浣滅榪樻湁璁稿錛屽錛?br />
銆銆銆銆__getindex錛氭搷浣滅[]錛屾敮鎸佽鍙栬闂紝濡?v = a[10]
銆銆銆銆__newindex錛氭搷浣滅[]錛屾敮鎸佽祴鍊艱闂紝濡?a[10] = 1.22
銆銆銆銆__tostring錛氬皢鍙橀噺杞崲鎴愬瓧涓瞋_add錛氱瓑鍚屼簬operator +
銆銆銆銆__add錛氭搷浣滅 錛?br />銆銆銆銆__sub錛氭搷浣滅 鈥?br />銆銆銆銆__mul錛氭搷浣滅 脳
銆銆銆銆__div錛氭搷浣滅 梅
銆銆銆銆__pow錛氭搷浣滅 ^ (涔樻柟)
銆銆銆銆__unm錛氫竴鍏冩搷浣滅 鈥?br />銆銆銆銆__concat錛氭搷浣滅 .. (瀛楃涓茶繛鎺?
銆銆銆銆__eq錛氭搷浣滅 == (a ~= b絳変環浜?not a == b)
銆銆銆銆__lt錛氭搷浣滅 < (a > b 絳変環浜?b < a)
銆銆銆銆__le錛氭搷浣滅 <= (a >= b 絳変環浜?b <= a錛岃娉ㄦ剰鐨勬槸錛屽鏋滄病鏈夊畾涔?__le"錛屽垯Lua灝嗕細灝濊瘯灝哸<=b 杞崲鎴?not (b < a) )

銆銆銆銆__gc錛氬湪鍨冨溇鍥炴敹鏃惰皟鐢ㄦ鍑芥暟錛岀浉褰撲簬C++鐨勬瀽鏋勫嚱鏁般傚己鐑堝緩璁畾涔夋鎿嶄綔絎︼紝浠ュ厤閫犳垚鍐呭瓨娉勬紡絳夋儏鍐點傛瘮濡傦細
銆銆銆銆LUALIB_ITEM_DESTROY("__gc", MyArray ) 聽聽// 鍨冨溇鏀墮泦鏃舵秷闄ゅ璞$敤銆?br />
銆銆銆銆(娉? 榪欓噷瑕佽鏄庝竴涓嬶紝鍦╨ua涓紝璁塊棶绱㈠紩鎿嶄綔絎︽槸__index錛屼笉鏄痏_getindex錛屽湪luaWrapper搴撲腑錛屼負浜嗘柟渚夸嬌鐢紝灝嗗叾鏄犲皠涓篲_getindex錛屽悓鏃訛紝瀵筥_index鐨勫畾涔夊皢浼氳蹇界暐銆?br />
銆銆銆銆灝辮繖涔堢畝鍗曘傚亣濡備綘宸茬粡鏈夌幇鎴愮殑綾伙紝鑰屼綘娌℃湁淇敼璇ョ被鐨勬潈鍔涳紝濡備綍灝嗗叾鍔犲叆鍒癓ua涓憿錛熺瓟妗堝氨鏄紝緇ф壙瀹冿紝灝嗘妸媧劇敓綾誨姞鍏ュ埌Lua涓?br />
緇撴潫璇?br />銆銆LuaWrapper 闇瑕佺敤鍒癰oost搴撶殑鏀寔錛歜oost/type_traits.hpp, boost/function.hpp, boost/bind.hpp錛屽畠浣跨敤浜咰++鐨勬ā鏉塊儴浠界壒鍖栵紝鍥犳錛孋++緙栬瘧鍣ㄥ鏋滀笉鏀寔姝ょ壒鎬э紝灝嗘棤娉曠紪璇戙傜洰鍓嶆敮鎸佹鐗規х殑緙栬瘧鍣ㄥ凡緇忔湁寰堝銆傚湪VisualStudo浜у搧緋誨垪涓紝鍙湁VC7.1鑳芥敮鎸佹鐗規э紝鍥犳錛屾偍濡傛灉姝e湪浣跨敤VisualStudio錛岃紜浣犵敤鐨勬槸VisualStudio2003銆?br />銆銆濡傛灉浣犺寰?LuaWrapper For C++ 鑳藉甯姪浣狅紝鎴戜細鎰熻寰堣崳騫搞傛垜寰堟効鎰忓皢榪欎釜紼嬪簭搴撳垎浜粰澶у銆傞『渚夸竴鎻愮殑鏄紝濡傛灉浣犲湪浣跨敤榪囩▼涓彂鐜癇UG錛屾垨鏄湁濂界殑寤鴻錛屽笇鏈涙偍鑳戒笌鎴戣仈緋匯備綘鍦ㄤ嬌鐢ㄨ繃紼嬩腑錛岃涓嶈鍒犻櫎鏂囦歡涓殑緗插悕淇℃伅錛涘鏋滀綘淇敼浜嗙▼搴忓簱錛岃鎮ㄥ湪淇敼鐨勬枃浠朵腑鍔犲叆鎮ㄧ殑淇敼璇存槑銆傚綋鐒訛紝鎴戜細闈炲父嬈㈣繋鎮ㄨ兘灝嗕慨鏀瑰悗鐨勭▼搴忓洖棣堢粰鎴戙傛垜浼氱戶緇紭鍖栧茍瀹屽杽瀹冦?br />
=============================================================

File: Click Here Download: LuaWrapper For C++
File: Click Here Download: LuaWrapper test program

=============================================================



]]>
銆愯漿璐淬慙ua 紼嬪簭璁捐鍒濇http://m.shnenglu.com/mybios/archive/2006/11/18/15338.html鏉庨敠淇?mybios)鏉庨敠淇?mybios)Sat, 18 Nov 2006 01:48:00 GMThttp://m.shnenglu.com/mybios/archive/2006/11/18/15338.htmlhttp://m.shnenglu.com/mybios/comments/15338.htmlhttp://m.shnenglu.com/mybios/archive/2006/11/18/15338.html#Feedback0http://m.shnenglu.com/mybios/comments/commentRss/15338.htmlhttp://m.shnenglu.com/mybios/services/trackbacks/15338.html鐗堟潈鎵鏈夎漿杞借娉ㄦ槑鍘熷嚭澶?br />涓婚〉錛氱浜屼漢鐢?http://www.d2-life.com
銆銆銆http://www.d2-life.com/LBS/blogview.asp?logID=39

銆銆鍦ㄨ繖綃囨枃绔犱腑錛屾垜鎯沖悜澶у浠嬬粛濡備綍榪涜Lua紼嬪簭璁捐銆傛垜鍋囪澶у閮藉榪囪嚦灝戜竴闂ㄧ紪紼嬭璦錛屾瘮濡侭asic鎴朇錛岀壒鍒槸C銆傚洜涓篖ua鐨勬渶澶х敤閫旀槸鍦ㄥ涓葷▼搴忎腑浣滀負鑴氭湰浣跨敤鐨勩?br />銆銆Lua 鐨勮娉曟瘮杈冪畝鍗曪紝瀛︿範璧鋒潵涔熸瘮杈冪渷鍔涳紝浣嗗姛鑳藉嵈騫朵笉寮便?br />銆銆鍦↙ua涓紝涓鍒囬兘鏄彉閲忥紝闄や簡鍏抽敭瀛椼傝璁頒綇榪欏彞璇濄?br />
I.聽聽棣栧厛鏄敞閲?br />銆銆鍐欎竴涓▼搴忥紝鎬繪槸灝戜笉浜嗘敞閲婄殑銆?br />銆銆鍦↙ua涓紝浣犲彲浠ヤ嬌鐢ㄥ崟琛屾敞閲婂拰澶氳娉ㄩ噴銆?br />銆銆鍗曡娉ㄩ噴涓紝榪炵畫涓や釜鍑忓彿"--"琛ㄧず娉ㄩ噴鐨勫紑濮嬶紝涓鐩村歡緇埌琛屾湯涓烘銆傜浉褰撲簬C++璇█涓殑"http://"銆?br />銆銆澶氳娉ㄩ噴涓紝鐢?--[["琛ㄧず娉ㄩ噴寮濮嬶紝騫朵笖涓鐩村歡緇埌"]]"涓烘銆傝繖縐嶆敞閲婄浉褰撲簬C璇█涓殑"/*鈥?/"銆傚湪娉ㄩ噴褰撲腑錛?[["鍜?]]"鏄彲浠ュ祵濂楃殑銆?br />II.聽聽Lua緙栫▼
銆銆緇忓吀鐨?Hello world"鐨勭▼搴忔繪槸琚敤鏉ュ紑濮嬩粙緇嶄竴縐嶈璦銆傚湪Lua涓紝鍐欎竴涓繖鏍風殑紼嬪簭寰堢畝鍗曪細
銆銆print("Hello world")
銆銆鍦↙ua涓紝璇彞涔嬮棿鍙互鐢ㄥ垎鍙?錛?闅斿紑錛屼篃鍙互鐢ㄧ┖鐧介殧寮銆備竴鑸潵璇達紝濡傛灉澶氫釜璇彞鍐欏湪鍚屼竴琛岀殑璇濓紝寤鴻鎬繪槸鐢ㄥ垎鍙烽殧寮銆?br />銆銆Lua 鏈夊ソ鍑犵紼嬪簭鎺у埗璇彞錛屽錛?br />
銆銆鏉′歡鎺у埗錛歩f 鏉′歡 then 鈥?elseif 鏉′歡 then 鈥?else 鈥?end
銆銆While寰幆錛歸hile 鏉′歡 do 鈥?end
銆銆Repeat寰幆錛歳epeat 鈥?until 鏉′歡
銆銆For寰幆錛歠or 鍙橀噺 = 鍒濆鹼紝緇堢偣鍊鹼紝姝ヨ繘 do 鈥?end
銆銆For寰幆錛歠or 鍙橀噺1錛屽彉閲?錛屸?錛屽彉閲廚 in琛ㄦ垨鏋氫婦鍑芥暟 do 鈥?end

銆銆娉ㄦ剰涓涓嬶紝for鐨勫驚鐜彉閲忔繪槸鍙綔鐢ㄤ簬for鐨勫眬閮ㄥ彉閲忥紝浣犱篃鍙互鐪佺暐姝ヨ繘鍊鹼紝榪欐椂鍊欙紝for寰幆浼氫嬌鐢?浣滀負姝ヨ繘鍊箋?br />銆銆浣犲彲浠ョ敤break鏉ヤ腑姝竴涓驚鐜?br />銆銆濡傛灉浣犳湁紼嬪簭璁捐鐨勫熀紜錛屾瘮濡備綘瀛﹁繃Basic錛孋涔嬬被鐨勶紝浣犱細瑙夊緱Lua涔熶笉闅俱備絾Lua鏈夊嚑涓湴鏂規槸鏄庢樉涓嶅悓浜庤繖浜涚▼搴忚璁¤璦鐨勶紝鎵浠ヨ鐗瑰埆娉ㄦ剰銆?br />
銆銆錛庤鍙ュ潡
銆銆銆銆璇彞鍧楀湪C++涓槸鐢?{"鍜?}"鎷搗鏉ョ殑錛屽湪Lua涓紝瀹冩槸鐢╠o 鍜?end 鎷搗鏉ョ殑銆傛瘮濡傦細
銆銆銆銆do print("Hello") end
銆銆銆銆浣犲彲浠ュ湪 鍑芥暟 涓拰 璇彞鍧?涓畾灞閮ㄥ彉閲忋?br />
銆銆錛庤祴鍊艱鍙?br />銆銆銆銆璧嬪艱鍙ュ湪Lua琚己鍖栦簡銆傚畠鍙互鍚屾椂緇欏涓彉閲忚祴鍊箋?br />銆銆銆銆渚嬪錛?br />銆銆銆銆a,b,c,d=1,2,3,4
銆銆銆銆鐢氳嚦鏄細
銆銆銆銆a,b=b,a聽聽-- 澶氫箞鏂逛究鐨勪氦鎹㈠彉閲忓姛鑳藉晩銆?br />銆銆銆銆鍦ㄩ粯璁ゆ儏鍐典笅錛屽彉閲忔繪槸璁や負鏄叏灞鐨勩傚亣濡備綘瑕佸畾涔夊眬閮ㄥ彉閲忥紝鍒欏湪絎竴嬈¤祴鍊肩殑鏃跺欙紝闇瑕佺敤local璇存槑銆傛瘮濡傦細
銆銆銆銆local a,b,c = 1,2,3聽聽-- a,b,c閮芥槸灞閮ㄥ彉閲?br />
銆銆錛庢暟鍊艱繍綆?br />銆銆銆銆鍜孋璇█涓鏍鳳紝鏀寔 +, -, *, /銆備絾Lua榪樺浜嗕竴涓?^"銆傝繖琛ㄧず鎸囨暟涔樻柟榪愮畻銆傛瘮濡?^3 緇撴灉涓?, 2^4緇撴灉涓?6銆?br />銆銆銆銆榪炴帴涓や釜瀛楃涓詫紝鍙互鐢?.."榪愬絎︺傚錛?br />銆銆銆銆"This a " .. "string." -- 絳変簬 "this a string"

銆銆錛庢瘮杈冭繍綆?br />銆銆銆銆< > <= >= == ~=
銆銆銆銆鍒嗗埆琛ㄧず 灝忎簬錛屽ぇ浜庯紝涓嶅ぇ浜庯紝涓嶅皬浜庯紝鐩哥瓑錛屼笉鐩哥瓑
銆銆銆銆鎵鏈夎繖浜涙搷浣滅鎬繪槸榪斿洖true鎴杅alse銆?br />銆銆銆銆瀵逛簬Table錛孎unction鍜孶serdata綾誨瀷鐨勬暟鎹紝鍙湁 == 鍜?~=鍙互鐢ㄣ傜浉絳夎〃紺轟袱涓彉閲忓紩鐢ㄧ殑鏄悓涓涓暟鎹傛瘮濡傦細
銆銆銆銆a={1,2}
銆銆銆銆b=a
銆銆銆銆print(a==b, a~=b)聽聽-- true, false
銆銆銆銆a={1,2}
銆銆銆銆b={1,2}
銆銆銆銆print(a==b, a~=b)聽聽-- false, true

銆銆錛庨昏緫榪愮畻
銆銆銆銆and, or, not
銆銆銆銆鍏朵腑錛宎nd 鍜?or 涓嶤璇█鍖哄埆鐗瑰埆澶с?br />銆銆銆銆鍦ㄨ繖閲岋紝璇峰厛璁頒綇錛屽湪Lua涓紝鍙湁false鍜宯il鎵嶈綆椾負false錛屽叾瀹冧換浣曟暟鎹兘璁$畻涓簍rue錛?涔熸槸true錛?br />銆銆銆銆and 鍜?or鐨勮繍綆楃粨鏋滀笉鏄痶rue鍜宖alse錛岃屾槸鍜屽畠鐨勪袱涓搷浣滄暟鐩稿叧銆?br />銆銆銆銆a and b錛氬鏋渁涓篺alse錛屽垯榪斿洖a錛涘惁鍒欒繑鍥瀊
銆銆銆銆a or b錛氬鏋?a 涓簍rue錛屽垯榪斿洖a錛涘惁鍒欒繑鍥瀊

銆銆銆銆涓懼嚑涓緥瀛愶細
銆銆銆銆 print(4 and 5) --> 5
銆銆銆銆 print(nil and 13) --> nil
銆銆銆銆 print(false and 13) --> false
銆銆銆銆 print(4 or 5) --> 4
銆銆銆銆 print(false or 5) --> 5

銆銆銆銆鍦↙ua涓繖鏄緢鏈夌敤鐨勭壒鎬э紝涔熸槸姣旇緝浠や漢娣鋒揣鐨勭壒鎬с?br />銆銆銆銆鎴戜滑鍙互妯℃嫙C璇█涓殑璇彞錛歺 = a? b : c錛屽湪Lua涓紝鍙互鍐欐垚錛歺 = a and b or c銆?br />銆銆銆銆鏈鏈夌敤鐨勮鍙ユ槸錛?x = x or v錛屽畠鐩稿綋浜庯細if not x then x = v end 銆?br />
銆銆錛庤繍綆楃浼樺厛綰э紝浠庨珮鍒頒綆欏哄簭濡備笅錛?br />銆銆銆銆^
銆銆銆銆not - 錛堜竴鍏冭繍綆楋級
銆銆銆銆 * /
銆銆銆銆 + -
銆銆銆銆 ..錛堝瓧絎︿覆榪炴帴錛?br />銆銆銆銆 < > <= >= ~= ==
銆銆銆銆 and
銆銆銆銆 or

III.聽聽鍏抽敭瀛?br />銆銆鍏抽敭瀛楁槸涓嶈兘鍋氫負鍙橀噺鐨勩侺ua鐨勫叧閿瓧涓嶅錛屽氨浠ヤ笅鍑犱釜錛?br />銆銆and break do else elseif
銆銆end false for function if
銆銆in local nil not or
銆銆repeat return then true until銆while

IV.聽聽鍙橀噺綾誨瀷
銆銆鎬庝箞紜畾涓涓彉閲忔槸浠涔堢被鍨嬬殑鍛紵澶у鍙互鐢╰ype()鍑芥暟鏉ユ鏌ャ侺ua鏀寔鐨勭被鍨嬫湁浠ヤ笅鍑犵錛?br />
銆銆Nil聽聽絀哄鹼紝鎵鏈夋病鏈変嬌鐢ㄨ繃鐨勫彉閲忥紝閮芥槸nil銆俷il鏃㈡槸鍊鹼紝鍙堟槸綾誨瀷銆?br />銆銆Boolean聽聽甯冨皵鍊?br />銆銆Number聽聽鏁板鹼紝鍦↙ua閲岋紝鏁板肩浉褰撲簬C璇█鐨刣ouble
銆銆String聽聽瀛楃涓詫紝濡傛灉浣犳効鎰忕殑璇濓紝瀛楃涓叉槸鍙互鍖呭惈'\0'瀛楃鐨?br />銆銆Table聽聽鍏崇郴琛ㄧ被鍨嬶紝榪欎釜綾誨瀷鍔熻兘姣旇緝寮哄ぇ錛屾垜浠湪鍚庨潰鎱㈡參璇淬?br />銆銆Function聽聽鍑芥暟綾誨瀷錛屼笉瑕佹鐤戯紝鍑芥暟涔熸槸涓縐嶇被鍨嬶紝涔熷氨鏄錛屾墍鏈夌殑鍑芥暟錛屽畠鏈韓灝辨槸涓涓彉閲忋?br />銆銆Userdata聽聽鍡紝榪欎釜綾誨瀷涓撻棬鐢ㄦ潵鍜孡ua鐨勫涓繪墦浜ら亾鐨勩傚涓婚氬父鏄敤C鍜孋++鏉ョ紪鍐欑殑錛屽湪榪欑鎯呭喌涓嬶紝Userdata鍙互鏄涓葷殑浠繪剰鏁版嵁綾誨瀷錛屽父鐢ㄧ殑鏈塖truct鍜屾寚閽堛?br />銆銆Thread銆銆聽聽綰跨▼綾誨瀷錛屽湪Lua涓病鏈夌湡姝g殑綰跨▼銆侺ua涓彲浠ュ皢涓涓嚱鏁板垎鎴愬嚑閮ㄤ喚榪愯銆傚鏋滄劅鍏磋叮鐨勮瘽錛屽彲浠ュ幓鐪嬬湅Lua鐨勬枃妗c?br />
V.聽聽鍙橀噺鐨勫畾涔?br />銆銆鎵鏈夌殑璇█錛岄兘瑕佺敤鍒板彉閲忋傚湪Lua涓紝涓嶇浣犲湪浠涔堝湴鏂逛嬌鐢ㄥ彉閲忥紝閮戒笉闇瑕佸0鏄庯紝騫朵笖鎵鏈夌殑榪欎簺鍙橀噺鎬繪槸鍏ㄥ眬鍙橀噺錛岄櫎闈烇紝浣犲湪鍓嶉潰鍔犱笂"local"銆?br />銆銆榪欎竴鐐硅鐗瑰埆娉ㄦ剰錛屽洜涓轟綘鍙兘鎯沖湪鍑芥暟閲屼嬌鐢ㄥ眬閮ㄥ彉閲忥紝鍗村繕浜嗙敤local鏉ヨ鏄庛?br />銆銆鑷充簬鍙橀噺鍚嶅瓧錛屽畠鏄ぇ灝忓啓鐩稿叧鐨勩備篃灝辨槸璇達紝A鍜宎鏄袱涓笉鍚岀殑鍙橀噺銆?br />銆銆瀹氫箟涓涓彉閲忕殑鏂規硶灝辨槸璧嬪箋?錛?鎿嶄綔灝辨槸鐢ㄦ潵璧嬪肩殑
銆銆鎴戜滑涓璧鋒潵瀹氫箟鍑犵甯哥敤綾誨瀷鐨勫彉閲忓惂銆?br />銆銆A.聽聽Nil
銆銆銆銆姝e鍓嶉潰鎵璇寸殑錛屾病鏈変嬌鐢ㄨ繃鐨勫彉閲忕殑鍊鹼紝閮芥槸Nil銆傛湁鏃跺欐垜浠篃闇瑕佸皢涓涓彉閲忔竻闄わ紝榪欐椂鍊欙紝鎴戜滑鍙互鐩存帴緇欏彉閲忚祴浠il鍊箋傚錛?br />銆銆銆銆var1=nil聽聽-- 璇鋒敞鎰?nil 涓瀹氳灝忓啓

銆銆B.聽聽Boolean
銆銆銆銆甯冨皵鍊奸氬父鏄敤鍦ㄨ繘琛屾潯浠跺垽鏂殑鏃跺欍傚竷灝斿兼湁涓ょ錛歵rue 鍜?false銆傚湪Lua涓紝鍙湁false鍜宯il鎵嶈璁$畻涓篺alse錛岃屾墍鏈変換浣曞叾瀹冪被鍨嬬殑鍊鹼紝閮芥槸true銆傛瘮濡?錛岀┖涓茬瓑絳夛紝閮芥槸true銆備笉瑕佽C璇█鐨勪範鎯墍璇錛?鍦↙ua涓殑鐨勭‘紜槸true銆備綘涔熷彲浠ョ洿鎺ョ粰涓涓彉閲忚祴浠oolean綾誨瀷鐨勫鹼紝濡傦細
銆銆銆銆varboolean = true

銆銆C.聽聽Number
銆銆銆銆鍦↙ua涓紝鏄病鏈夋暣鏁扮被鍨嬬殑錛屼篃涓嶉渶瑕併備竴鑸儏鍐典笅錛屽彧瑕佹暟鍊間笉鏄緢澶э紙姣斿涓嶈秴榪?00,000,000,000,000錛夛紝鏄笉浼氫駭鐢熻垗鍏ヨ宸殑銆傚湪寰堝CPU涓婏紝瀹炴暟鐨勮繍綆楀茍涓嶆瘮鏁存暟鎱€?br />銆銆銆銆瀹炴暟鐨勮〃紺烘柟娉曪紝鍚孋璇█綾諱技錛屽錛?br />銆銆銆銆4 0.4 4.57e-3 0.3e12 5e+20

銆銆D.聽聽String
銆銆銆銆瀛楃涓詫紝鎬繪槸涓縐嶉潪甯稿父鐢ㄧ殑楂樼駭綾誨瀷銆傚湪Lua涓紝浣犲彲浠ラ潪甯告柟渚跨殑瀹氫箟寰堥暱寰堥暱鐨勫瓧絎︿覆銆?br />銆銆銆銆瀛楃涓插湪Lua涓湁鍑犵鏂規硶鏉ヨ〃紺猴紝鏈閫氱敤鐨勬柟娉曪紝鏄敤鍙屽紩鍙鋒垨鍗曞紩鍙鋒潵鎷搗涓涓瓧絎︿覆鐨勶紝濡傦細
銆銆銆銆"This is a string."
銆銆銆銆鍜孋璇█鐩稿悓鐨勶紝瀹冩敮鎸佷竴浜涜漿涔夊瓧絎︼紝鍒楄〃濡備笅錛?br />銆銆銆銆\a聽聽bell
銆銆銆銆\b聽聽back space
銆銆銆銆\f聽聽form feed
銆銆銆銆\n聽聽newline
銆銆銆銆\r聽聽carriage return
銆銆銆銆\t聽聽horizontal tab
銆銆銆銆\v聽聽vertical tab
銆銆銆銆\\聽聽backslash
銆銆銆銆\"聽聽double quote
銆銆銆銆\'聽聽single quote
銆銆銆銆\[聽聽left square bracket
銆銆銆銆\]聽聽right square bracket

銆銆銆銆鐢變簬榪欑瀛楃涓插彧鑳藉啓鍦ㄤ竴琛屼腑錛屽洜姝わ紝涓嶅彲閬垮厤鐨勮鐢ㄥ埌杞箟瀛楃銆傚姞鍏ヤ簡杞箟瀛楃鐨勪覆錛岀湅璧鋒潵瀹炲湪鏄笉鏁㈡伃緇達紝姣斿錛?br />銆銆銆銆"one line\nnext line\n\"in quotes\", 'in quotes'"
銆銆銆銆涓澶у爢鐨?\"絎﹀彿璁╀漢鐪嬭搗鏉ュ緢鍊掕儍鍙c傚鏋滀綘涓庢垜鏈夊悓鎰燂紝閭d箞錛屾垜浠湪Lua涓紝鍙互鐢ㄥ彟涓縐嶈〃紺烘柟娉曪細鐢?[["鍜?]]"灝嗗琛岀殑瀛楃涓叉嫭璧鋒潵錛屽錛?br />銆銆銆銆page = [[
銆銆銆銆<HTML>
銆銆銆銆銆銆<HEAD>
銆銆銆銆銆銆銆銆<TITLE>An HTML Page</TITLE>
銆銆銆銆銆銆</HEAD>
銆銆銆銆銆銆<BODY>
銆銆銆銆銆銆銆銆<A HREF="lua' target=_blank>http://www.lua.org">Lua</A>
銆銆銆銆銆銆銆銆[[a text between double brackets]]
銆銆銆銆銆銆</BODY>
銆銆銆銆</HTML>
銆銆銆銆]]

銆銆銆銆鍊煎緱娉ㄦ剰鐨勬槸錛屽湪榪欑瀛楃涓蹭腑錛屽鏋滃惈鏈夊崟鐙嬌鐢ㄧ殑"[["鎴?]]"灝變粛鐒跺緱鐢?\["鎴?\]"鏉ラ伩鍏嶆涔夈傚綋鐒訛紝榪欑鎯呭喌鏄瀬灝戜細鍙戠敓鐨勩?br />
銆銆E.聽聽Table
銆銆銆銆鍏崇郴琛ㄧ被鍨嬶紝榪欐槸涓涓緢寮哄ぇ鐨勭被鍨嬨傛垜浠彲浠ユ妸榪欎釜綾誨瀷鐪嬩綔鏄竴涓暟緇勩傚彧鏄疌璇█鐨勬暟緇勶紝鍙兘鐢ㄦ鏁存暟鏉ヤ綔绱㈠紩錛涘湪Lua涓紝浣犲彲浠ョ敤浠繪剰綾誨瀷鏉ヤ綔鏁扮粍鐨勭儲寮曪紝闄や簡nil銆傚悓鏍鳳紝鍦–璇█涓紝鏁扮粍鐨勫唴瀹瑰彧鍏佽涓縐嶇被鍨嬶紱鍦↙ua涓紝浣犱篃鍙互鐢ㄤ換鎰忕被鍨嬬殑鍊兼潵浣滄暟緇勭殑鍐呭錛岄櫎浜唍il銆?br />銆銆銆銆Table鐨勫畾涔夊緢綆鍗曪紝瀹冪殑涓昏鐗瑰緛鏄敤"{"鍜?}"鏉ユ嫭璧蜂竴緋誨垪鏁版嵁鍏冪礌鐨勩傛瘮濡傦細

銆銆銆銆T1 = {}聽聽-- 瀹氫箟涓涓┖琛?br />銆銆銆銆T1[1]=10聽聽-- 鐒跺悗鎴戜滑灝卞彲浠ヨ薄C璇█涓鏍鋒潵浣跨敤瀹冧簡銆?br />銆銆銆銆T1["John"]={Age=27, Gender="Male"}
銆銆銆銆榪欎竴鍙ョ浉褰撲簬錛?br />銆銆銆銆T1["John"]={}聽聽-- 蹇呴』鍏堝畾涔夋垚涓涓〃錛岃繕璁板緱鏈畾涔夌殑鍙橀噺鏄痭il綾誨瀷鍚?br />銆銆銆銆T1["John"]["Age"]=27
銆銆銆銆T1["John"]["Gender"]="Male"
銆銆銆銆褰撹〃鐨勭儲寮曟槸瀛楃涓茬殑鏃跺欙紝鎴戜滑鍙互綆鍐欐垚錛?br />銆銆銆銆T1.John={}
銆銆銆銆T1.John.Age=27
銆銆銆銆T1.John.Gender="Male"
銆銆銆銆鎴?br />銆銆銆銆T1.John{Age=27, Gender="Male"}
銆銆銆銆榪欐槸涓涓緢寮虹殑鐗規с?br />
銆銆銆銆鍦ㄥ畾涔夎〃鐨勬椂鍊欙紝鎴戜滑鍙互鎶婃墍鏈夌殑鏁版嵁鍐呭涓璧峰啓鍦?{"鍜?}"涔嬮棿錛岃繖鏍峰瓙鏄潪甯告柟渚匡紝鑰屼笖寰堝ソ鐪嬨傛瘮濡傦紝鍓嶉潰鐨凾1鐨勫畾涔夛紝鎴戜滑鍙互榪欎箞鍐欙細

銆銆銆銆T1=
銆銆銆銆{
銆銆銆銆銆銆10,聽聽-- 鐩稿綋浜?[1] = 10
銆銆銆銆銆銆[100] = 40,
銆銆銆銆銆銆John=聽聽-- 濡傛灉浣犲師鎰忥紝浣犺繕鍙互鍐欐垚錛歔"John"] =
銆銆銆銆銆銆{
銆銆銆銆銆銆銆銆Age=27,聽聽 -- 濡傛灉浣犲師鎰忥紝浣犺繕鍙互鍐欐垚錛歔"Age"] =27
銆銆銆銆銆銆銆銆Gender=Male聽聽 -- 濡傛灉浣犲師鎰忥紝浣犺繕鍙互鍐欐垚錛歔"Gender"] =Male
銆銆銆銆銆銆},
銆銆銆銆銆銆20聽聽-- 鐩稿綋浜?[2] = 20
銆銆銆銆}

銆銆銆銆鐪嬭搗鏉ュ緢婕備寒錛屼笉鏄悧錛熸垜浠湪鍐欑殑鏃跺欙紝闇瑕佹敞鎰忎笁鐐癸細
銆銆銆銆絎竴錛屾墍鏈夊厓绱犱箣闂達紝鎬繪槸鐢ㄩ楀彿"錛?闅斿紑錛?br />銆銆銆銆絎簩錛屾墍鏈夌儲寮曞奸兘闇瑕佺敤"["鍜?]"鎷搗鏉ワ紱濡傛灉鏄瓧絎︿覆錛岃繕鍙互鍘繪帀寮曞彿鍜屼腑鎷彿錛?br />銆銆銆銆絎笁錛屽鏋滀笉鍐欑儲寮曪紝鍒欑儲寮曞氨浼氳璁や負鏄暟瀛楋紝騫舵寜欏哄簭鑷姩浠?寰鍚庣紪錛?br />
銆銆銆銆琛ㄧ被鍨嬬殑鏋勯犳槸濡傛鐨勬柟渚匡紝浠ヨ嚧浜庡父甯歌浜虹敤鏉ヤ唬鏇塊厤緗枃浠躲傛槸鐨勶紝涓嶇敤鎬鐤戯紝瀹冩瘮ini鏂囦歡瑕佹紓浜紝騫朵笖寮哄ぇ鐨勫銆?br />
銆銆F.聽聽Function
銆銆銆銆鍑芥暟錛屽湪Lua涓紝鍑芥暟鐨勫畾涔変篃寰堢畝鍗曘傚吀鍨嬬殑瀹氫箟濡備笅錛?br />銆銆銆銆function add(a,b)聽聽-- add 鏄嚱鏁板悕瀛楋紝a鍜宐鏄弬鏁板悕瀛?br />銆銆銆銆 return a+b聽聽-- return 鐢ㄦ潵榪斿洖鍑芥暟鐨勮繍琛岀粨鏋?br />銆銆銆銆end

銆銆銆銆璇鋒敞鎰忥紝return璇█涓瀹氳鍐欏湪end涔嬪墠銆傚亣濡備綘闈炶鍦ㄤ腑闂存斁涓婁竴鍙eturn錛岄偅涔堣鍐欐垚錛歞o return end銆?br />銆銆銆銆榪樿寰楀墠闈㈣榪囷紝鍑芥暟涔熸槸鍙橀噺綾誨瀷鍚楋紵涓婇潰鐨勫嚱鏁板畾涔夛紝鍏跺疄鐩稿綋浜庯細
銆銆銆銆add = function (a,b) return a+b end
銆銆銆銆褰撲綘閲嶆柊緇檃dd璧嬪兼椂錛屽畠灝變笉鍐嶈〃紺鴻繖涓嚱鏁頒簡銆備綘鐢氳嚦鍙互璧嬬粰add浠繪剰鏁版嵁錛屽寘鎷琻il 錛堣繖鏍鳳紝浣犲氨娓呴櫎浜哸dd鍙橀噺錛夈侳unction鏄笉鏄緢璞璇█鐨勫嚱鏁版寚閽堝憿錛?br />
銆銆銆銆鍜孋璇█涓鏍鳳紝Lua鐨勫嚱鏁板彲浠ユ帴鍙楀彲鍙樺弬鏁頒釜鏁幫紝瀹冨悓鏍鋒槸鐢?鈥?鏉ュ畾涔夌殑錛屾瘮濡傦細
銆銆銆銆function sum (a,b,鈥?
銆銆銆銆濡傛灉鎯沖彇寰椻︽墍浠h〃鐨勫弬鏁幫紝鍙互鍦ㄥ嚱鏁頒腑璁塊棶arg灞閮ㄥ彉閲忥紙琛ㄧ被鍨嬶級寰楀埌銆?br />銆銆銆銆濡?sum(1,2,3,4)
銆銆銆銆鍒欙紝鍦ㄥ嚱鏁頒腑錛宎 = 1, b = 2, arg = {3, 4}
銆銆銆銆鏇村彲璐電殑鏄紝瀹冨彲浠ュ悓鏃惰繑鍥炲涓粨鏋滐紝姣斿錛?br />銆銆銆銆function s()
銆銆銆銆銆銆return 1,2,3,4
銆銆銆銆end
銆銆銆銆a,b,c,d = s()聽聽-- 姝ゆ椂錛宎 = 1, b = 2, c = 3, d = 4

銆銆銆銆鍓嶉潰璇磋繃錛岃〃綾誨瀷鍙互鎷ユ湁浠繪剰綾誨瀷鐨勫鹼紝鍖呮嫭鍑芥暟錛佸洜姝わ紝鏈変竴涓緢寮哄ぇ鐨勭壒鎬ф槸錛屾嫢鏈夊嚱鏁扮殑琛紝鍝︼紝鎴戞兂鏇存伆褰撶殑搴旇璇存槸瀵硅薄鍚с侺ua鍙互浣跨敤闈㈠悜瀵硅薄緙栫▼浜嗐備笉淇★紵閭f垜涓句緥濡備笅錛?br />
銆銆銆銆t =
銆銆銆銆{
銆銆銆銆 Age = 27
銆銆銆銆 add = function(self, n) self.Age = self.Age+n end
銆銆銆銆}
銆銆銆銆print(t.Age)聽聽-- 27
銆銆銆銆t.add(t, 10)
銆銆銆銆print(t.Age)聽聽-- 37

銆銆銆銆涓嶈繃錛宼.add(t,10) 榪欎竴鍙ュ疄鍦ㄦ槸鏈夌偣鍦熷鍚э紵娌″叧緋伙紝鍦↙ua涓紝浣犲彲浠ョ畝鍐欐垚錛?br />銆銆銆銆t:add(10)聽聽聽聽-- 鐩稿綋浜?t.add(t,10)

銆銆G.聽聽Userdata 鍜?Thread
銆銆銆銆榪欎袱涓被鍨嬬殑璇濋錛岃秴鍑轟簡鏈枃鐨勫唴瀹癸紝灝變笉鎵撶畻緇嗚浜嗐?br />
VI.聽聽緇撴潫璇?br />銆銆灝辮繖涔堢粨鏉熶簡鍚楋紵褰撶劧涓嶆槸錛屾帴涓嬫潵錛岄渶瑕佺敤Lua瑙i噴鍣紝鏉ュ府鍔╀綘鐞嗚В鍜屽疄璺典簡銆傝繖綃囧皬鏂囧彧鏄府鍔╀綘澶т綋浜嗚ВLua鐨勮娉曘傚鏋滀綘鏈夌紪紼嬪熀紜錛岀浉淇′細寰堝揩瀵筁ua涓婃墜浜嗐?br />銆銆灝辮薄C璇█涓鏍鳳紝Lua鎻愪緵浜嗙浉褰撳鐨勬爣鍑嗗嚱鏁版潵澧炲己璇█鐨勫姛鑳姐備嬌鐢ㄨ繖浜涙爣鍑嗗嚱鏁幫紝浣犲彲浠ュ緢鏂逛究鐨勬搷浣滃悇縐嶆暟鎹被鍨嬶紝騫跺鐞嗚緭鍏ヨ緭鍑恒傛湁鍏寵繖鏂歸潰鐨勪俊鎭紝浣犲彲浠ュ弬鑰冦奝rogramming in Lua 銆嬩竴涔︼紝浣犲彲浠ュ湪緗戠粶涓婄洿鎺ヨ鐪嬬數瀛愮増錛岀綉鍧涓猴細http://www.lua.org/pil/index.html
銆銆褰撶劧錛孡ua鐨勬渶寮哄ぇ鐨勫姛鑳芥槸鑳戒笌瀹夸富紼嬪簭浜茶湝鏃犻棿鐨勫悎浣滐紝鍥犳錛屼笅涓綃囨枃绔狅紝鎴戜細鍛婅瘔澶у錛屽浣曞湪浣犵殑紼嬪簭涓嬌鐢↙ua璇█浣滀負鑴氭湰錛屼嬌浣犵殑紼嬪簭鍜孡ua鑴氭湰榪涜浜や簰銆?br />

]]>
銆愯漿璐淬戝浣曞湪C++涓泦鎴怢ua鑴氭湰(LuaPlus綃? http://m.shnenglu.com/mybios/archive/2006/11/18/15337.html鏉庨敠淇?mybios)鏉庨敠淇?mybios)Sat, 18 Nov 2006 01:46:00 GMThttp://m.shnenglu.com/mybios/archive/2006/11/18/15337.htmlhttp://m.shnenglu.com/mybios/comments/15337.htmlhttp://m.shnenglu.com/mybios/archive/2006/11/18/15337.html#Feedback0http://m.shnenglu.com/mybios/comments/commentRss/15337.htmlhttp://m.shnenglu.com/mybios/services/trackbacks/15337.html

鍘誨勾鎴戜綔浜嗕竴涓狶ua鑴氭湰鐨凜++鍖呰錛屾湁璁稿鏈嬪弸鎰熷叴瓚o紝騫跺皾璇曚嬌鐢紝鎴戞劅鍒板彈瀹犺嫢鎯娿備簨瀹炰笂錛屾垜浣滅殑鍖呰錛屽涔犵殑鐩殑姣旇緝寮猴紝瀹冭繕鏄湁璁稿緙洪櫡鐨勩備負浜嗚鏈嬪弸浠皯璧板集璺紝鎴戞帹鑽愪嬌鐢↙uaPlus浣滀負C++鐨勫寘瑁呫?/p>

LuaPlus鏄疞ua鐨凜++澧炲己錛屼篃灝辨槸璇達紝LuaPlus鏈韓灝辨槸鍦↙ua鐨勬簮鐮佷笂榪涜澧炲己寰楁潵鐨勩傜敤瀹冧笌C++榪涜鍚堜綔錛屾槸姣旇緝濂界殑涓涓夋嫨銆?br />LuaPlus鐩墠鐗堟湰涓猴細LuaPlus for Lua 5.01 Distribution Build 1080 (February 28, 2004)銆傚ぇ瀹跺彲浠ュ埌http://luaplus.org/ 绔欑偣涓嬭澆錛?br />婧愮爜聽聽 (http://wwhiz.com/LuaPlus/LuaPlus50_Build1081.zip)
鐩爣鐮?(http://wwhiz.com/LuaPlus/LuaPlus50_Build1081_Win32Binaries.zip)

鎴戝皢鍦ㄤ笅闈㈣鏄庯紝濡備綍浣跨敤LuaPlus錛屼互鍙婂浣曟洿鏂逛究鐨勮LuaPlus涓嶤++鐨勭被鍚堜綔鏃犻棿銆?/p>

1. 璋冪敤Lua鑴氭湰

聽聽聽 // 鍒涘緩Lua瑙i噴鍣細
聽聽聽 LuaStateOwner state;
聽聽聽
聽聽聽 // 鎵цLua鑴氭湰錛?br />聽聽聽 state->DoString("print('Hello World\n')");
聽聽聽 // 杞藉叆Lua鑴氭湰鏂囦歡騫舵墽琛岋細
聽聽聽 state->DoFile("C:\\test.lua");
聽聽聽 // 杞藉叆緙栬瘧鍚庣殑Lua鑴氭湰鏂囦歡騫舵墽琛岋細
聽聽聽 state->DoFile("C:\\test.luac");

2. 涓嶭ua鑴氭湰浜掔浉璋冪敤

聽聽聽 // 涓篖ua鑴氭湰璁劇疆鍙橀噺
聽聽聽 state->GetGlobals().SetNumber("myvalue", 123456);
聽聽聽 // 鑾峰緱Lua鍙橀噺鐨勫?br />聽聽聽 int myvalue = state->GetGlobal("myvalue").GetInteger();
聽聽聽
聽聽聽 // 璋冪敤Lua鍑芥暟
聽聽聽 LuaFunction<int> luaPrint = state->GetGlobal("print");
聽聽聽 luaPrint("Hello World\n");
聽聽聽
聽聽聽 // 璁㎜ua璋冪敤C璇█鍑芥暟
聽聽聽 int add(int a, int b){ return a+b;}
聽聽聽 state->GetGlobals().RegisterDirect("add", add);
聽聽聽 state->DoString("print(add(3,4))");
聽聽聽
聽聽聽 // 璁㎜ua璋冪敤C++綾繪垚鍛樺嚱鏁?br />聽聽聽 class Test{public: int add(int a, int b){return a+b;}};
聽聽聽 Test test;
聽聽聽 state->GetGlobals().RegisterDirect("add", test, add);
聽聽聽 state->DoString("print(add(3,4))");
聽聽聽
3. 鍦↙ua鑴氭湰涓嬌鐢–++綾?br />聽聽聽
聽聽聽 榪欎釜紼嶅井鏈夌偣灝忛夯鐑︺備笉榪囷紝鎴戝寘瑁呬簡涓涓狶uaPlusHelper.h鐨勬枃浠訛紝瀹冨彲浠ュ緢杞繪澗鐨勫畬鎴愯繖涓伐浣溿傚畠鐨勫疄鐜頒篃寰堢畝鍗曪紝澶у鍙互浠庢簮鐮佷笂鏉ヨ幏寰楀浣曠敤綰疞uaPlus瀹炵幇鍚屾牱鐨勫姛鑳姐?br />聽聽聽 涓嶈繃錛岃繖閲屼粛鐒舵湁涓涓檺鍒舵病鏈夎В鍐籌細涓嶈兘浣跨敤铏氭垚鍛樺嚱鏁般備笉榪囪冭檻鍒版垜浠粎鏄湪Lua璋冪敤涓涓婥++鍑芥暟錛屽茍涓嶆槸瑕佸皢C++瀹岀編鐨勫鍏ュ埌Lua錛岃繖涓檺鍒跺畬鍏ㄥ彲浠ユ帴鍙椼?br />聽聽聽 鍙﹀錛岀被鎴愬憳鍙橀噺涓嶈兘鐩存帴鍦↙ua涓闂紝鍙互閫氳繃綾繪垚鍛樺嚱鏁版潵璁塊棶錛堟瘮濡係etValue/GetValue涔嬬被)銆?/p>

聽// 涓嬮潰鏄竴涓畝鍗曠殑C++綾?聽聽聽
聽class Logger
聽{
聽public:
聽聽void LOGMEMBER(const char* message)
聽聽{
聽聽聽printf("In member function: %s\n", message);
聽聽}

聽聽Logger()
聽聽{
聽聽聽printf("Constructing(%p)...\n", this);
聽聽聽v = 10;
聽聽}
聽聽virtual ~Logger()
聽聽{
聽聽聽printf("Destructing(%p)...\n", this);
聽聽}

聽聽Logger(int n)
聽聽{
聽聽聽printf(" -- Constructing[%d](%p)...\n", n, this);
聽聽}
聽聽Logger(Logger* logger)
聽聽{
聽聽聽printf(" -- Constructing[%p](%p)...\n", logger, this);
聽聽聽logger->LOGMEMBER(" Call From Constructor\n");
聽聽}
聽聽int SetValue(int val)
聽聽{
聽聽聽v = val;
聽聽}
聽聽int GetValue()
聽聽{
聽聽聽return v;
聽聽}
聽public:
聽聽int v;
聽};

聽聽聽 // 瀵煎叆鍒癓ua鑴氭湰錛?br />聽聽聽 LuaClass<Logger>(state)
聽.create("Logger")聽// 瀹氫箟鏋勯犲嚱鏁?Logger::Logger()
聽.create<int>("Logger2")聽聽// 瀹氫箟鏋勯犲嚱鏁?Logger::Logger(int)
聽.create<Logger*>("Logger3")聽// 瀹氫箟鏋勯犲嚱鏁?Logger::Logger(Logger*)
聽.destroy("Free")聽聽// 瀹氫箟鏋愭瀯鍑芥暟 Logger::~Logger()
聽.destroy("__gc")聽聽// 瀹氫箟鏋愭瀯鍑芥暟 Logger::~Logger()
聽.def("lm", &Logger::LOGMEMBER)聽 // 瀹氫箟鎴愬憳鍑芥暟 Logger::LOGMEMBER(const char*)
聽.def("SetValue", &Logger::SetValue)
聽.def("GetValue", &Logger::GetValue);

聽聽聽 // 鍦↙ua涓嬌鐢↙ogger綾?1)錛?br />聽聽聽 state->DoString(
聽聽聽聽聽聽聽 "l = Logger();"聽聽// 璋冪敤鏋勯犲嚱鏁?Logger::Logger()
聽聽聽聽聽聽聽 "l.lm('Hello World 1');"聽 // 璋冪敤鎴愬憳鍑芥暟 Logger::LOGMEMBER(const char*)
聽聽聽聽聽聽聽 "l.Free();"聽聽// 璋冪敤鏋愭瀯鍑芥暟 Logger::~Logger()
聽聽聽聽聽聽聽 );

聽聽聽 // 鍦↙ua涓嬌鐢↙ogger綾?2)錛?br />聽聽聽 state->DoString(
聽聽聽聽聽聽聽 "m = Logger(10);"聽// 璋冪敤鏋勯犲嚱鏁?Logger::Logger(int)
聽聽聽聽聽聽聽 "m.lm('Hello World 2');"聽 // 璋冪敤鎴愬憳鍑芥暟 Logger::LOGMEMBER(const char*)
聽聽聽聽聽聽聽 "n = Logger(m);"聽// 璋冪敤鏋勯犲嚱鏁?Logger::Logger(Logger*)
聽聽聽聽聽聽聽 "n.lm('Hello World 3');"聽 // 璋冪敤鎴愬憳鍑芥暟 Logger::LOGMEMBER(const char*)
聽聽聽聽聽聽聽 "m.SetValue(11);"
聽聽聽聽聽聽聽 "print(m.GetValue());"
聽聽聽聽聽聽聽 "m,n = nil, nil;"聽// m,n 灝嗙敱Lua鐨勫瀮鏋佸洖鏀舵潵璋冪敤鏋愭瀯鍑芥暟
聽聽聽聽聽聽聽 );

4. 灝嗕竴緇凜鍑芥暟褰掔被鍒癓ua妯″潡

聽聽聽 //鍚屼笂闈竴鏍鳳紝鎴戦噰鐢↙uaPlusHelper.h鏉ョ畝鍖栵細
聽聽聽 LuaModule(state, "mymodule")
聽.def("add", add)
聽.def("add2", test, add);

聽聽聽 state->DoString(
聽聽聽聽聽聽聽 "print(mymodule.add(3,4));"
聽聽聽聽聽聽聽 "print(mymodule.add2(3,4));"
聽聽聽聽聽聽聽 );

5. 浣跨敤Lua鐨凾able鏁版嵁綾誨瀷
聽聽聽 // 鍦↙ua涓垱寤篢able
聽聽聽 LuaObject table = state->GetGlobals().CreateTable("mytable");
聽聽聽 table.SetInteger("m", 10);
聽聽聽 table.SetNumber("f", 1.99);
聽聽聽 table.SetString("s", "Hello World");
聽聽聽 table.SetWString("ch", L"浣犲ソ");
聽聽聽 table.SetString(1, "What");
聽聽聽
聽聽聽 // 鐩稿綋浜嶭ua涓殑錛?br />聽聽聽 // mytable = {m=10, f=1.99, s="Hello World", ch=L"浣犲ソ", "What"}
聽聽聽
聽聽聽 // 涔熷彲浠ヤ嬌鐢╰able浣滀負key鍜寁alue:
聽聽聽 state->GetGlobals().CreateTable("nexttable")
聽聽聽聽聽聽聽 .SetString(table, "Hello")
聽聽聽聽聽聽聽 .SetObject("obj", table);
聽聽聽 // 鐩稿綋浜嶭ua涓殑錛?br />聽聽聽 // nexttable = {mytable="Hello", obj=mytable}
聽聽聽
聽聽聽 //鑾峰緱Table鐨勫唴瀹癸細
聽聽聽 LuaObject t2 = state->GetGlobals("mytable");
聽聽聽 int m = t2.GetByName("m").GetInteger();
聽聽聽
聽聽聽 LuaObject t3 = state->GetGlobals("nexttable");
聽聽聽 std::string str = t3.GetByObject(t2).GetString();
聽聽聽
6聽 閬嶅巻Table

聽LuaStateOwner state;
聽state.DoString( "MyTable = { Hi = 5, Hello = 10, Yo = 6 }" );

聽LuaObject obj = state.GetGlobals()[ "MyTable" ];
聽for ( LuaTableIterator it( obj ); it; it.Next() )
聽{
聽聽聽聽 const char* key = it.GetKey().GetString();
聽聽聽聽 int num = it.GetValue().GetInteger();
聽}

綃囧熬

涓婇潰鎴戝彧鏄畝鍗曠殑涓句竴浜涗緥瀛愭潵璇存槑LuaPlus浠ュ強LuaPlusHelper鐨勪嬌鐢ㄦ柟娉曪紝鍏蜂綋鏂囨。璇峰弬瑙丩uaPlus銆?/p>

闇瑕佷笅杞絃uaPlusHelper錛岃鐐硅繖閲岋細
http://www.d2-life.com/LBS/attachments/month_200509/06_zwo3LuaPlusHelper.zip



]]>
銆愯漿璐淬戜嬌鐢?Lua 緙栧啓鍙祵鍏ュ紡鑴氭湰http://m.shnenglu.com/mybios/archive/2006/11/18/15336.html鏉庨敠淇?mybios)鏉庨敠淇?mybios)Sat, 18 Nov 2006 01:39:00 GMThttp://m.shnenglu.com/mybios/archive/2006/11/18/15336.htmlhttp://m.shnenglu.com/mybios/comments/15336.htmlhttp://m.shnenglu.com/mybios/archive/2006/11/18/15336.html#Feedback0http://m.shnenglu.com/mybios/comments/commentRss/15336.htmlhttp://m.shnenglu.com/mybios/services/trackbacks/15336.html

浣跨敤 Lua 緙栧啓鍙祵鍏ュ紡鑴氭湰

Lua 鎻愪緵浜嗛珮綰ф娊璞★紝鍗村張娌″け鍘諱笌紜歡鐨勫叧鑱?/p>

鏈樉紺洪渶瑕?JavaScript 鐨勬枃妗i夐」



綰у埆: 鍒濈駭

Martin Streicher (martin.streicher@linux-mag.com), 棣栧腑緙栬緫, Linux Magazine

2006 騫?6 鏈?12 鏃?/p>

铏界劧緙栬瘧鎬х紪紼嬭璦鍜岃剼鏈璦鍚勮嚜鍏鋒湁鑷繁鐙壒鐨勪紭鐐癸紝浣嗘槸濡傛灉鎴戜滑浣跨敤榪欎袱縐嶇被鍨嬬殑璇█鏉ョ紪鍐欏ぇ鍨嬬殑搴旂敤紼嬪簭浼氭槸浠涔堟牱瀛愬憿錛烲ua 鏄竴縐嶅祵鍏ュ紡鑴氭湰璇█錛屽畠闈炲父灝忥紝閫熷害寰堝揩錛屽姛鑳藉嵈闈炲父寮哄ぇ銆傚湪鍒涘緩鍏朵粬閰嶇疆鏂囦歡鎴栬祫婧愭牸寮忥紙浠ュ強涓庝箣瀵瑰簲鐨勮В鏋愬櫒錛変箣鍓嶏紝璇峰皾璇曚竴涓?Lua銆?/blockquote>

灝界璇稿 Perl銆丳ython銆丳HP 鍜?Ruby 涔嬬被鐨勮В閲婃х紪紼嬭璦鏃ョ泭琚?Web 搴旂敤紼嬪簭騫挎硾鍦伴噰綰?鈥斺?瀹冧滑宸茬粡闀挎湡鐢ㄦ潵瀹炵幇鑷姩鍖栫郴緇熺鐞嗕換鍔?鈥斺?浣嗘槸璇稿 C銆丆++ 涔嬬被鐨勭紪璇戞х紪紼嬭璦渚濈劧鏄繀闇鐨勩傜紪璇戞х紪紼嬭璦鐨勬ц兘鏄剼鏈璦鎵鏃犳硶浼佸強鐨勶紙鍙湁鎵嬪伐璋冧紭鐨勬眹緙栫▼搴忕殑鎬ц兘鎵嶈兘瓚呰繃瀹冿級錛屾湁浜涜蔣浠?鈥斺?鍖呮嫭鎿嶄綔緋葷粺鍜岃澶囬┍鍔ㄧ▼搴?鈥斺?鍙兘浣跨敤緙栬瘧浠g爜鏉ラ珮鏁堝湴瀹炵幇銆傚疄闄呬笂錛屽綋杞歡鍜岀‖浠墮渶瑕佽繘琛屾棤緙濆湴榪炴帴鎿嶄綔鏃訛紝紼嬪簭鍛樻湰鑳藉湴灝變細閫夋嫨 C 緙栬瘧鍣細C 闈炲父鍩虹錛岃窛紱?鈥滃師濮嬮噾灞炴潗鏂欓潪甯歌繎鈥?鈥斺?鍗沖彲浠ユ搷浣滅‖浠剁殑寰堝鐗規?鈥斺?騫朵笖 C 鐨勮〃鐜板姏闈炲父寮哄ぇ錛屽彲浠ユ彁渚涢珮綰х紪紼嬬粨鏋勶紝渚嬪緇撴瀯銆佸驚鐜佸懡鍚嶅彉閲忓拰浣滅敤鍩熴?/p>

鐒惰岋紝鑴氭湰璇█涔熸湁鑷繁鐙壒鐨勪紭鐐廣備緥濡傦紝褰撴煇縐嶈璦鐨勮В閲婂櫒琚垚鍔熺Щ妞嶅埌涓縐嶅鉤鍙頒笂浠ュ悗錛屼嬌鐢ㄨ繖縐嶈璦緙栧啓鐨勫ぇ閲忚剼鏈氨鍙互涓嶅姞浠諱綍淇敼鍦ㄨ繖縐嶆柊騫沖彴涓婅繍琛?鈥斺?瀹冧滑娌℃湁璇稿緋葷粺鐗瑰畾鐨勫嚱鏁板簱涔嬬被鐨勪緷璧栭檺鍒躲傦紙鎴戜滑鍙互鑰冭檻涓涓?Microsoft廬 Windows廬 鎿嶄綔緋葷粺涓婄殑璁稿 DLL 鏂囦歡鍜?UNIX廬 鍙?Linux廬 涓婄殑寰堝 libcs錛夈傚彟澶栵紝鑴氭湰璇█閫氬父閮借繕浼氭彁渚涢珮綰х紪紼嬫瀯閫犲拰渚垮埄鐨勬搷浣滐紝紼嬪簭鍛樺彲浠ヤ嬌鐢ㄨ繖浜涘姛鑳芥潵鎻愰珮鐢熶駭鏁堢巼鍜岀伒媧繪с傚彟澶栵紝浣跨敤瑙i噴璇█鏉ョ紪紼嬬殑紼嬪簭鍛樺伐浣滅殑閫熷害鏇村揩錛屽洜涓鴻繖涓嶉渶瑕佺紪璇戝拰閾炬帴鐨勬楠ゃ侰 鍙婂叾綾諱技璇█涓殑 鈥滅紪鐮併佺紪璇戙侀摼鎺ャ佽繍琛屸?鍛ㄦ湡緙╁噺鎴愪簡鏇翠負绱у噾鐨?鈥滅紪鍐欒剼鏈佽繍琛屸濄?/p>

Lua 鏂扮壒鎬?/font>

涓庡叾浠栬剼鏈璦涓鏍鳳紝Lua 涔熸湁鑷繁鐨勪竴浜涚壒鎬э細

  • Lua 綾誨瀷銆?/b>鍦?Lua 涓紝鍊煎彲浠ユ湁綾誨瀷錛屼絾鏄彉閲忕殑綾誨瀷閮芥槸鍔ㄦ佸喅瀹氱殑銆?i>nil銆佸竷灝斿瀷銆佹暟瀛?/i> 鍜?瀛楃涓?/i> 綾誨瀷鐨勫伐浣滄柟寮忎笌鎴戜滑鏈熸湜鐨勪竴鏍楓?
    • Nil 鏄間負 nil 鐨勪竴縐嶇壒孌婄被鍨嬶紝鐢ㄦ潵琛ㄧず娌℃湁鍊箋?
    • 甯冨皵鍨嬬殑鍊煎彲浠ユ槸 true 鍜?false 甯擱噺銆傦紙Nil 涔熷彲浠ヨ〃紺?false錛屼換浣曢潪 nil 鐨勫奸兘琛ㄧず true銆傦級
    • Lua 涓墍鏈夌殑鏁板瓧閮芥槸鍙岀簿搴︾殑錛堜笉榪囨垜浠彲浠ラ潪甯哥畝渚垮湴緙栧啓涓浜涗唬鐮佹潵瀹炵幇鍏朵粬鏁板瓧綾誨瀷錛夈?
    • 瀛楃涓叉槸瀹氶暱瀛楃鏁扮粍銆傦紙鍥犳錛岃鍦ㄤ竴涓瓧絎︿覆鍚庨潰闄勫姞涓婂瓧絎︼紝蹇呴』瀵瑰叾榪涜鎷瘋礉銆傦級
  • 琛ㄣ佸嚱鏁?/i> 鍜?i>綰跨▼ 綾誨瀷閮芥槸寮曠敤銆傛瘡涓兘鍙互璧嬪肩粰涓涓彉閲忥紝浣滀負鍙傛暟浼犻掞紝鎴栦綔涓鴻繑鍥炲間粠鍑芥暟涓繑鍥炪備緥濡傦紝涓嬮潰鏄竴涓瓨鍌ㄥ嚱鏁扮殑渚嬪瓙錛?br />
    -- example of an anonymous function
    -- returned as a value
    -- see http://www.tecgraf.puc-rio.br/~lhf/ftp/doc/hopl.pdf
    function add(x)
      return function (y) return (x + y) end
    end
    f = add(2)
    print(type(f), f(10))
    function  12
    

  • Lua 綰跨▼銆?/b>綰跨▼鏄氳繃璋冪敤鍐呭祵鍑芥暟 coroutine.create(f) 鍒涘緩鐨勪竴涓?i>鍗忓悓渚嬬▼ (co-routine)錛屽叾涓?f 鏄竴涓?Lua 鍑芥暟銆傜嚎紼嬩笉浼氬湪鍒涘緩鏃跺惎鍔紱鐩稿弽錛屽畠鏄湪鍒涘緩涔嬪悗浣跨敤 coroutine.resume(t) 鍚姩鐨勶紝鍏朵腑 t 灝辨槸涓涓嚎紼嬨傛瘡涓崗鍚屼緥紼嬮兘蹇呴』浣跨敤 coroutine.yield() 鍋跺皵鑾峰緱鍏朵粬鍗忓悓渚嬬▼鐨勫鐞嗗櫒銆?
  • 璧嬪艱鍙ャ?/b>Lua 鍏佽浣跨敤澶氱璧嬪艱鍙ワ紝鍙互鍏堝琛ㄨ揪寮忚繘琛屾眰鍊鹼紝鐒跺悗鍐嶈繘琛岃祴鍊箋備緥濡傦紝涓嬮潰鐨勮鍙ワ細

    i = 3
    a = {1, 3, 5, 7, 9}
    i, a[i], a[i+1], b = i+1, a[i+1], a[i]
    print (i, a[3], a[4], b, I)
    

    浼氱敓鎴?4 7 5 nil nil銆傚鏋滃彉閲忓垪琛ㄧ殑涓暟澶т簬鍊煎垪琛ㄧ殑涓暟錛岄偅涔堝鍑虹殑鍙橀噺閮借璧嬪間負 nil錛涘洜姝わ紝b 灝辨槸 nil銆傚鏋滃肩殑涓暟澶氫簬鍙橀噺鐨勪釜鏁幫紝閭d箞澶氬嚭鐨勫奸儴鍒嗗氨浼氱畝鍗曞湴涓㈠純銆傚湪 Lua 涓紝鍙橀噺鍚嶆槸澶у皬鍐欐晱鎰熺殑錛岃繖鍙互瑙i噴涓轟粈涔?I 鐨勫兼槸 nil銆?
  • 鍧楋紙Chunk錛夈?/b> 鍧?/i> 鍙互鏄換浣?Lua 璇彞搴忓垪銆傚潡鍙互淇濆瓨鍒版枃浠朵腑錛屾垨鑰呬繚瀛樺埌 Lua 紼嬪簭涓殑瀛楃涓蹭腑銆傛瘡涓潡閮芥槸浣滀負涓涓尶鍚嶅嚱鏁頒綋鏉ユ墽琛岀殑銆傚洜姝わ紝鍧楀彲浠ュ畾涔夊眬閮ㄥ彉閲忓拰榪斿洖鍊箋?
  • 鏇撮叿鐨勪笢瑗褲?/b>Lua 鍏鋒湁涓涓爣璁?娓呯悊鍨冨溇鏀墮泦鍣ㄣ傚湪 Lua 5.1 涓紝鍨冨溇鏀墮泦鍣ㄦ槸浠ュ閲忔柟寮忓伐浣滅殑銆侺ua 鍏鋒湁瀹屾暣鐨勮瘝娉曢棴鍖咃紙榪欎笌 Scheme 綾諱技錛岃屼笌 Python 涓嶅悓錛夈侺ua 鍏鋒湁鍙潬鐨勫熬閮ㄨ皟鐢ㄨ涔夛紙鍚屾牱錛岃繖涔熶笌 Scheme 綾諱技錛岃屼笌 Python 涓嶅悓錛夈?

鍦?Programming in Lua 鍜?Lua-users wiki 錛堥摼鎺ヨ鍙傝鍚庨潰鐨?鍙傝冭祫鏂?/font> 閮ㄥ垎錛変腑鍙互鎵懼埌鏇村 Lua 浠g爜鐨勪緥瀛愩?/p>

鍦ㄦ墍鏈夌殑宸ョ▼浠誨姟涓紝瑕佸湪緙栬瘧鎬ц璦鍜岃В閲婃ц璦涔嬮棿浣滃嚭閫夋嫨錛屽氨鎰忓懗鐫瑕佸湪榪欑鐜涓姣忕璇█鐨勪紭緙虹偣銆佹潈閲嶅拰鎶樹腑榪涜璇勬祴錛屽茍鎺ュ彈鎵甯︽潵鐨勯闄┿?/p>



鍥為〉棣?/font>


鍦ㄤ袱涓笘鐣屼箣闂存渶濂藉湴榪涜娣峰悎

濡傛灉鎮ㄥ笇鏈涘厖鍒嗗埄鐢ㄨ繖涓や釜涓栫晫鐨勪紭鐐癸紝搴旇鎬庢牱鍔炲憿錛屾槸閫夋嫨鏈濂界殑鎬ц兘榪樻槸閫夋嫨楂樼駭寮哄ぇ鐨勬娊璞★紵鏇磋繘涓姝ヨ錛屽鏋滄垜浠笇鏈涘澶勭悊鍣ㄥ瘑闆嗕笖渚濊禆浜庣郴緇熺殑綆楁硶鍜屽嚱鏁頒互鍙婁笌緋葷粺鏃犲叧涓斿緢瀹規槗鏍規嵁闇瑕佽岃繘琛屼慨鏀圭殑鍗曠嫭閫昏緫榪涜浼樺寲錛岄偅鍙堝綋濡備綍鍛紵

瀵歸珮鎬ц兘浠g爜鍜岄珮綰х紪紼嬬殑闇瑕佽繘琛屽鉤琛℃槸 Lua錛堜竴縐嶅彲宓屽叆寮忚剼鏈璦錛夎瑙e喅鐨勯棶棰樸傚湪闇瑕佹椂鎴戜滑鍙互浣跨敤緙栬瘧鍚庣殑浠g爜鏉ュ疄鐜板簳灞傜殑鍔熻兘錛岀劧鍚庤皟鐢?Lua 鑴氭湰鏉ユ搷浣滃鏉傜殑鏁版嵁銆傜敱浜?Lua 鑴氭湰鏄笌緙栬瘧浠g爜鐙珛鐨勶紝鍥犳鎴戜滑鍙互鍗曠嫭淇敼榪欎簺鑴氭湰銆備嬌鐢?Lua錛屽紑鍙戝懆鏈熷氨闈炲父綾諱技浜?鈥滅紪鐮併佺紪璇戙佽繍琛屻佺紪鍐欒剼鏈佺紪鍐欒剼鏈佺紪鍐欒剼鏈?...鈥濄?/p>

渚嬪錛孡ua Web 绔欑偣 鈥滀嬌鐢ㄢ?欏甸潰錛堣鍙傝 鍙傝冭祫鏂?/font>錛夊垪鍑轟簡涓繪祦甯傚満涓婄殑鍑犱釜璁$畻鏈烘父鎴忥紝鍖呮嫭 World of Warcraft 鍜岋紙瀹剁敤鐗堢殑錛?i>Defender錛屽畠浠泦鎴?Lua 鏉ュ疄鐜板緢澶氫笢瑗匡紝浠庣敤鎴風晫闈㈠埌鏁屼漢鐨勪漢宸ユ櫤鑳介兘鍙互銆侺ua 鐨勫叾浠栧簲鐢ㄧ▼搴忓寘鎷祦琛岀殑 Linux 杞歡鏇存柊宸ュ叿 apt-rpm 鐨勬墿灞曟満鍒訛紝榪樻湁 鈥淐razy Ivan鈥?Robocup 2000 鍐犲啗鑱旇禌鐨勬帶鍒墮昏緫銆傝繖涓〉闈笂鐨勫緢澶氭帹鑽愭劅璦閮藉 Lua 鐨勫皬宸т笌鏉板嚭鎬ц兘璧炰笉緇濆彛銆?/p>



鍥為〉棣?/font>


寮濮嬩嬌鐢?Lua

Lua 5.0.2 鐗堟湰鏄挵鍐欐湰鏂囨椂鐨勬渶鏂扮増鏈紝涓嶈繃鏈榪戝垰鍒氬彂甯冧簡 5.1 鐗堟湰銆傛偍鍙互浠?lua.org 涓婁笅杞?Lua 鐨勬簮浠g爜錛屽湪 Lua-users wiki錛堥摼鎺ヨ鍙傝 鍙傝冭祫鏂?/font>錛変笂鍙互鎵懼埌棰勫厛緙栬瘧濂界殑浜岃繘鍒舵枃浠躲傚畬鏁寸殑 Lua 5.0.2 鏍稿績鏂囦歡涓寘鎷簡鏍囧噯搴撳拰 Lua 緙栬瘧鍣紝涓嶈繃鍙湁 200KB 澶у皬銆?/p>

濡傛灉鎮ㄤ嬌鐢ㄧ殑鏄?Debian Linux錛岄偅涔堝彲浠ヤ互瓚呯駭鐢ㄦ埛鐨勮韓浠借繍琛屼笅闈㈢殑鍛戒護鏉ュ揩閫熷畨瑁?Lua 5.0錛?/p>
# apt-get install lua50

鏈枃涓粰鍑虹殑渚嬪瓙閮芥槸鍦?Debian Linux Sarge 涓婅繍琛岀殑錛屼嬌鐢ㄧ殑鏄?Lua 5.0.2 鍜?2.4.27-2-686 鐗堟湰鐨?Linux 鍐呮牳銆?/p>

鍦ㄧ郴緇熶笂瀹夎濂?Lua 涔嬪悗錛屾垜浠彲浠ラ鍏堟潵璇曠敤涓涓嬪崟鐙殑 Lua 瑙i噴鍣ㄣ傦紙鎵鏈夌殑 Lua 搴旂敤紼嬪簭蹇呴』瑕佸祵鍏ュ埌瀹夸富搴旂敤紼嬪簭涓傝В閲婂櫒鍙槸涓縐嶇壒孌婄被鍨嬬殑瀹夸富錛屽浜庡紑鍙戝拰璋冭瘯宸ヤ綔鏉ヨ闈炲父鏈夌敤銆傦級鍒涘緩涓涓悕涓?factorial.lua 鐨勬枃浠訛紝鐒跺悗杈撳叆涓嬮潰鐨勪唬鐮侊細

-- defines a factorial function
function fact (n)
  if n == 0 then
    return 1
  else
    return n * fact(n-1)
  end
end

print("enter a number:")
a = io.read("*number")
print(fact(a))

factorial.lua 涓殑浠g爜 鈥斺?鏇寸‘鍒囧湴璇存槸浠諱綍 Lua 璇彞搴忓垪 鈥斺?閮界О涓轟竴涓?i>鍧?/i>錛岃繖鍦ㄤ笂闈㈢殑 Lua 鐗規?/font> 涓凡緇忚繘琛屼簡浠嬬粛銆傝鎵ц鍒氭墠鍒涘緩鐨勪唬鐮佸潡錛岃榪愯鍛戒護 lua factorial.lua錛?/p>
$ lua factorial.lua
enter a number:
10
3628800

鎴栬呭儚鍦ㄥ叾浠栬В閲婃ц璦涓竴鏍鳳紝鎴戜滑鍙互鍦ㄤ唬鐮侀《閮ㄦ坊鍔犱竴琛?鈥滄爣璇嗙鈥濓紙#!錛夛紝浣胯繖涓剼鏈彉鎴愬彲鎵ц鐨勶紝鐒跺悗鍍忓崟鐙懡浠や竴鏍鋒潵榪愯榪欎釜鏂囦歡錛?/p>
$ (echo '#! /usr/bin/lua'; cat factorial.lua) > factorial 
$ chmod u+x factorial
$ ./factorial
enter a number:
4
24





鍥為〉棣?/font>


Lua 璇█

Lua 鍏鋒湁鐜頒唬鑴氭湰璇█涓殑寰堝渚垮埄錛氫綔鐢ㄥ煙錛屾帶鍒剁粨鏋勶紝榪唬鍣紝浠ュ強涓緇勭敤鏉ュ鐞嗗瓧絎︿覆銆佷駭鐢熷強鏀墮泦鏁版嵁鍜屾墽琛屾暟瀛﹁綆楁搷浣滅殑鏍囧噯搴撱傚湪 Lua 5.0 Reference Manual 涓湁瀵?Lua 璇█鐨勫畬鏁翠粙緇嶏紙璇峰弬瑙?鍙傝冭祫鏂?/font>錛夈?/p>

鍦?Lua 涓紝鍙湁鍊?/i> 鍏鋒湁綾誨瀷錛岃屽彉閲忕殑綾誨瀷鏄姩鎬佸喅瀹氱殑銆侺ua 涓殑鍩烘湰綾誨瀷錛堝鹼級鏈?8 縐嶏細 nil錛屽竷灝斿瀷錛屾暟瀛楋紝瀛楃涓詫紝鍑芥暟錛岀嚎紼嬶紝琛?/i> 浠ュ強 鐢ㄦ埛鏁版嵁銆傚墠 6 縐嶇被鍨嬪熀鏈笂鏄嚜鎻忚堪鐨勶紙渚嬪鎯呭喌璇峰弬瑙佷笂闈㈢殑 Lua 鐗規?/font> 涓鑺傦級錛涙渶鍚庝袱涓渶瑕佷竴鐐硅В閲娿?/p>

Lua 琛?/font>

鍦?Lua 涓紝琛ㄦ槸鐢ㄦ潵淇濆瓨鎵鏈夋暟鎹殑緇撴瀯銆傚疄闄呬笂錛岃〃鏄?Lua 涓?i>鎯熶竴鐨?/i> 鏁版嵁緇撴瀯銆傛垜浠彲浠ュ皢琛ㄤ綔涓烘暟緇勩佸瓧鍏革紙涔熺О涓?i>鏁e垪 鎴?i>鑱斿悎鏁扮粍錛夈佹爲銆佽褰曪紝絳夌瓑銆?/p>

涓庡叾浠栫紪紼嬭璦涓嶅悓錛孡ua 琛ㄧ殑姒傚康涓嶉渶瑕佹槸寮傛瀯鐨勶細琛ㄥ彲浠ュ寘鍚換浣曠被鍨嬬殑緇勫悎錛屼篃鍙互鍖呭惈綾繪暟緇勫厓绱犲拰綾誨瓧鍏稿厓绱犵殑娣峰悎浣撱傚彟澶栵紝浠諱綍 Lua 鍊?鈥斺?鍖呮嫭鍑芥暟鎴栧叾浠栬〃 鈥斺?閮藉彲浠ョ敤浣滃瓧鍏稿厓绱犵殑閿箋?/p>

瑕佸琛ㄨ繘琛屾祻瑙堬紝璇峰惎鍔?Lua 瑙i噴鍣紝騫惰緭鍏ユ竻鍗?1 涓殑榛戜綋鏄劇ず鐨勪唬鐮併?/p>
娓呭崟 1. 浣撻獙 Lua 琛?/b>
$ lua
> -- create an empty table and add some elements
> t1 = {}
> t1[1] = "moustache"
> t1[2] = 3
> t1["brothers"] = true

> -- more commonly, create the table and define elements
> all at once
> t2 = {[1] = "groucho", [3] = "chico", [5] = "harpo"}
> t3 = {[t1[1]] = t2[1], accent = t2[3], horn = t2[5]}
> t4 = {}
> t4[t3] = "the marx brothers"
> t5 = {characters = t2, marks = t3}
> t6 = {["a night at the opera"] = "classic"}

> -- make a reference and a string
> i = t3
> s = "a night at the opera"

> -- indices can be any Lua value
> print(t1[1], t4[t3], t6[s])
moustache   the marx brothers classic

> -- the phrase table.string is the same as table["string"]
> print(t3.horn, t3["horn"])
harpo   harpo

> -- indices can also be "multi-dimensional"
> print (t5["marks"]["horn"], t5.marks.horn)
harpo   harpo

> -- i points to the same table as t3
> = t4[i]
the marx brothers

> -- non-existent indices return nil values
> print(t1[2], t2[2], t5.films)
nil     nil     nil

>  -- even a function can be a key 
> t = {}
> function t.add(i,j)
>> return(i+j)
>> end
> print(t.add(1,2))
3
> print(t['add'](1,2))
3
>  -- and another variation of a function as a key 
> t = {}
> function v(x)
>> print(x)
>> end
> t[v] = "The Big Store"
> for key,value in t do key(value) end
The Big Store

姝e鎴戜滑鍙兘鏈熸湜鐨勪竴鏍鳳紝Lua 榪樻彁渚涗簡寰堝榪唬鍣ㄥ嚱鏁版潵瀵硅〃榪涜澶勭悊銆傚叏灞鍙橀噺 table 鎻愪緵浜嗚繖浜涘嚱鏁幫紙鏄殑錛孡ua 鍖呭氨鏄〃錛夈傛湁浜涘嚱鏁幫紝渚嬪 table.foreachi()錛屼細鏈熸湜涓涓粠 1錛堟暟瀛?1錛夊紑濮嬬殑榪炵畫鏁存暟鑼冨洿錛?/p>
> table.foreachi(t1, print)
1 moustache
2 3

鍙﹀涓浜涘嚱鏁幫紝渚嬪 table.foreach()錛屼細瀵規暣涓〃榪涜榪唬錛?/p>
> table.foreach(t2,print)
1       groucho
3       chico
5       harpo
> table.foreach(t1,print)
1       moustache
2       3
brothers        true

灝界鏈変簺榪唬鍣ㄥ鏁存暟绱㈠紩榪涜浜嗕紭鍖栵紝浣嗘槸鎵鏈夎凱浠e櫒閮藉彧綆鍗曞湴澶勭悊 (key, value) 瀵廣?/p>

鐜板湪鎴戜滑鍙互鍒涘緩涓涓〃 t錛屽叾鍏冪礌鏄?{2, 4, 6, language="Lua", version="5", 8, 10, 12, web="www.lua.org"}錛岀劧鍚庤繍琛?table.foreach(t, print) 鍜?table.foreachi(t, print)銆?/p>

鐢ㄦ埛鏁版嵁

鐢變簬 Lua 鏄負浜嗗祵鍏ュ埌浣跨敤鍙﹀涓縐嶈璦錛堜緥濡?C 鎴?C++錛夌紪鍐欑殑瀹夸富搴旂敤紼嬪簭涓紝騫朵笌瀹夸富搴旂敤紼嬪簭鍗忓悓宸ヤ綔錛屽洜姝ゆ暟鎹彲浠ュ湪 C 鐜鍜?Lua 涔嬮棿榪涜鍏變韓銆傛濡?Lua 5.0 Reference Manual 鎵璇達紝userdata 綾誨瀷鍏佽鎴戜滑鍦?Lua 鍙橀噺涓繚瀛樹換鎰忕殑 C 鏁版嵁銆傛垜浠彲浠ヨ涓?userdata 灝辨槸涓涓瓧鑺傛暟緇?鈥斺?瀛楄妭鍙互琛ㄧず鎸囬拡銆佺粨鏋勬垨瀹夸富搴旂敤紼嬪簭涓殑鏂囦歡銆?/p>

鐢ㄦ埛鏁版嵁鐨勫唴瀹規簮鑷簬 C錛屽洜姝ゅ湪 Lua 涓笉鑳藉鍏惰繘琛屼慨鏀廣傚綋鐒訛紝鐢變簬鐢ㄦ埛鏁版嵁婧愯嚜浜?C錛屽洜姝ゅ湪 Lua 涓篃娌℃湁瀵圭敤鎴鋒暟鎹瀹氫箟鎿嶄綔銆備笉榪囨垜浠彲浠ヤ嬌鐢ㄥ彟澶栦竴縐?Lua 鏈哄埗鏉ュ垱寤哄 userdata 榪涜澶勭悊鐨勬搷浣滐紝榪欑鏈哄埗縐頒負 鍏冭〃錛坢etatable錛夈?/i>

鍏冭〃

鐢變簬琛ㄥ拰鐢ㄦ埛鏁版嵁閮介潪甯哥伒媧伙紝鍥犳 Lua 鍏佽鎴戜滑閲嶈澆榪欎袱縐嶇被鍨嬬殑鏁版嵁鐨勬搷浣滐紙涓嶈兘閲嶈澆鍏朵粬 6 縐嶇被鍨嬶級銆?i>鍏冭〃 鏄竴涓紙鏅氱殑錛塋ua 琛紝瀹冨皢鏍囧噯鎿嶄綔鏄犲皠鎴愭垜浠彁渚涚殑鍑芥暟銆傚厓琛ㄧ殑閿肩О涓?i>浜嬩歡錛涘鹼紙鎹㈣岃█涔嬪氨鏄嚱鏁幫級縐頒負鍏冩柟娉?/i>銆?/p>

鍑芥暟 setmetatable() 鍜?getmetatable() 鍒嗗埆瀵瑰璞$殑鍏冭〃榪涜淇敼鍜屾煡璇€傛瘡涓〃鍜?userdada 瀵硅薄閮藉彲浠ュ叿鏈夎嚜宸辯殑鍏冭〃銆?/p>

渚嬪錛屾坊鍔犳搷浣滃搴旂殑浜嬩歡鏄?__add銆傛垜浠彲浠ユ帹鏂繖孌典唬鐮佹墍鍋氱殑浜嬫儏涔堬紵

-- Overload the add operation
-- to do string concatenation
--
mt = {}

function String(string)
  return setmetatable({value = string or ''}, mt)
end

-- The first operand is a String table
-- The second operand is a string
-- .. is the Lua concatenate operator
--
function mt.__add(a, b)
  return String(a.value..b)
end

s = String('Hello')
print((s + ' There ' + ' World!').value )

榪欐浠g爜浼氫駭鐢熶笅闈㈢殑鏂囨湰錛?/p>
Hello There World!

鍑芥暟 String() 鎺ユ敹涓涓瓧絎︿覆 string錛屽皢鍏跺皝瑁呭埌涓涓〃錛?code>{value = s or ''}錛変腑錛屽茍灝嗗厓琛?mt 璧嬪肩粰榪欎釜琛ㄣ傚嚱鏁?mt.__add() 鏄竴涓厓鏂規硶錛屽畠灝嗗瓧絎︿覆 b 娣誨姞鍒板湪 a.value 涓壘鍒扮殑瀛楃涓插悗闈?b 嬈°傝繖琛屼唬鐮?print((s + ' There ' + ' World!').value ) 璋冪敤榪欎釜鍏冩柟娉曚袱嬈°?/p>

__index 鏄彟澶栦竴涓簨浠躲?code>__index 鐨勫厓鏂規硶姣忓綋琛ㄤ腑涓嶅瓨鍦ㄩ敭鍊兼椂灝變細琚皟鐢ㄣ備笅闈㈡槸涓涓緥瀛愶紝瀹冭浣?(memoize) 鍑芥暟鐨勫鹼細

-- code courtesy of Rici Lake, rici@ricilake.net
function Memoize(func, t)
  return setmetatable(
     t or {},
    {__index =
      function(t, k)
        local v = func(k);
        t[k] = v;
        return v;
        end
    }
  )
end

COLORS = {"red", "blue", "green", "yellow", "black"}
color = Memoize(
  function(node)
    return COLORS[math.random(1, table.getn(COLORS))]
    end
)

灝嗚繖孌典唬鐮佹斁鍒?Lua 瑙i噴鍣ㄤ腑錛岀劧鍚庤緭鍏?print(color[1], color[2], color[1])銆傛偍灝嗕細鐪嬪埌綾諱技浜?blue black blue 鐨勫唴瀹廣?/p>

榪欐浠g爜鎺ユ敹涓涓敭鍊?node錛屾煡鎵?node 鎸囧畾鐨勯鑹層傚鏋滆繖縐嶉鑹蹭笉瀛樺湪錛屼唬鐮佸氨浼氱粰 node 璧嬩竴涓柊鐨勯殢鏈洪夋嫨鐨勯鑹層傚惁鍒欙紝灝辮繑鍥炶祴緇?node 鐨勯鑹層傚湪鍓嶄竴縐嶆儏鍐典腑錛?code>__index 鍏冩柟娉曡鎵ц涓嬈′互鍒嗛厤涓涓鑹層傚悗涓縐嶆儏鍐墊瘮杈冪畝鍗曪紝鎵鎵ц鐨勬槸蹇熸暎鍒楁煡鎵俱?/p>

Lua 璇█鎻愪緵浜嗗緢澶氬叾浠栧姛鑳藉己澶х殑鐗規э紝鎵鏈夎繖浜涚壒鎬ч兘鏈夊緢濂界殑鏂囨。榪涜浠嬬粛銆傚湪紕板埌闂鎴栧笇鏈涗笌涓撳榪涜浜よ皥鏃訛紝璇瘋繛鎺?Lua Users Chat Room IRC Channel錛堣鍙傝 鍙傝冭祫鏂?/font>錛夎幏寰楅潪甯哥儹蹇冪殑鏀寔銆?/p>



鍥為〉棣?/font>


宓屽叆鍜屾墿灞?/font>

闄や簡璇硶綆鍗曞茍涓斿叿鏈夊姛鑳藉己澶х殑琛ㄧ粨鏋勪箣澶栵紝Lua 鐨勫己澶у姛鑳戒嬌鍏跺彲浠ヤ笌瀹夸富璇█娣峰悎浣跨敤銆傜敱浜?Lua 涓庡涓昏璦鐨勫叧緋婚潪甯稿瘑鍒囷紝鍥犳 Lua 鑴氭湰鍙互瀵瑰涓昏璦鐨勫姛鑳借繘琛屾墿鍏呫備絾鏄繖縐嶈瀺鍚堟槸鍙岃耽鐨勶細瀹夸富璇█鍚屾椂涔熷彲浠ュ Lua 榪涜鎵╁厖銆備婦渚嬫潵璇達紝C 鍑芥暟鍙互璋冪敤 Lua 鍑芥暟錛屽弽涔嬩害鐒躲?/p>

Lua 涓庡涓昏璦涔嬮棿鐨勮繖縐嶅叡鐢熷叧緋葷殑鏍稿績鏄涓昏璦鏄竴涓?i>铏氭嫙鍫嗘爤銆傝櫄鎷熷爢鏍堜笌瀹為檯鍫嗘爤綾諱技錛屾槸涓縐嶅悗榪涘厛鍑猴紙LIFO錛夌殑鏁版嵁緇撴瀯錛屽彲浠ョ敤鏉ヤ復鏃跺瓨鍌ㄥ嚱鏁板弬鏁板拰鍑芥暟緇撴灉銆傝浠?Lua 涓皟鐢ㄥ涓昏璦鐨勫嚱鏁幫紙鍙嶄箣浜︾劧錛夛紝璋冪敤鑰呬細灝嗕竴浜涘煎帇鍏ュ爢鏍堜腑錛屽茍璋冪敤鐩爣鍑芥暟錛涜璋冪敤鐨勫嚱鏁頒細寮瑰嚭榪欎簺鍙傛暟錛堝綋鐒惰瀵圭被鍨嬪拰姣忎釜鍙傛暟鐨勫艱繘琛岄獙璇侊級錛屽鏁版嵁榪涜澶勭悊錛岀劧鍚庡皢緇撴灉鏀懼叆鍫嗘爤涓傚綋鎺у埗榪斿洖緇欒皟鐢ㄧ▼搴忔椂錛岃皟鐢ㄧ▼搴忓氨鍙互浠庡爢鏍堜腑鎻愬彇鍑鴻繑鍥炲箋?/p>

瀹為檯涓婂湪 Lua 涓嬌鐢ㄧ殑鎵鏈夌殑 C 搴旂敤紼嬪簭緙栫▼鎺ュ彛錛圓PI錛夐兘鏄氳繃鍫嗘爤鏉ヨ繘琛屾搷浣滅殑銆傚爢鏍堝彲浠ヤ繚瀛?Lua 鐨勫鹼紝涓嶈繃鍊肩殑綾誨瀷蹇呴』鏄皟鐢ㄧ▼搴忓拰琚皟鐢ㄨ呴兘鐭ラ亾鐨勶紝鐗瑰埆鏄悜鍫嗘爤涓帇鍏ョ殑鍊煎拰浠庡爢鏍堜腑寮瑰嚭鐨勫兼洿鏄姝わ紙渚嬪 lua_pushnil() 鍜?lua_pushnumber()銆?/p>

娓呭崟 2 緇欏嚭浜嗕竴涓畝鍗曠殑 C 紼嬪簭錛堣妭閫夎嚜 鍙傝冭祫鏂?/font> 涓?Programming in Lua 涓涔︾殑絎?24 绔狅級錛屽畠瀹炵幇浜嗕竴涓緢灝忎絾鍗村姛鑳藉畬鍠勭殑 Lua 瑙i噴鍣ㄣ?/p>
娓呭崟 2. 涓涓畝鍗曠殑 Lua 瑙i噴鍣?/b>
 1 #include <stdio.h>
 2 #include <lua.h>
 3 #include <lauxlib.h>
 4 #include <lualib.h>
 5
 6 int main (void) {
 7   char buff[256];
 8   int error;
 9   lua_State *L = lua_open();   /* opens Lua */
10   luaopen_base(L);             /* opens the basic library */
11   luaopen_table(L);            /* opens the table library */
12   luaopen_io(L);               /* opens the I/O library */
13   luaopen_string(L);           /* opens the string lib. */
14   luaopen_math(L);             /* opens the math lib. */
15
16   while (fgets(buff, sizeof(buff), stdin) != NULL) {
17     error = luaL_loadbuffer(L, buff, strlen(buff), "line") ||
18             lua_pcall(L, 0, 0, 0);
19     if (error) {
20       fprintf(stderr, "%s", lua_tostring(L, -1));
21       lua_pop(L, 1);  /* pop error message from the stack */
22     }
23   }
24
25   lua_close(L);
26   return 0;
27 }

絎?2 琛屽埌絎?4 琛屽寘鎷簡 Lua 鐨勬爣鍑嗗嚱鏁幫紝鍑犱釜鍦ㄦ墍鏈?Lua 搴撲腑閮戒細浣跨敤鐨勬柟渚垮嚱鏁頒互鍙婄敤鏉ユ墦寮搴撶殑鍑芥暟銆傜 9 琛屽垱寤轟簡涓涓?Lua 鐘舵?/i>銆傛墍鏈夌殑鐘舵佹渶鍒濋兘鏄┖鐨勶紱鎴戜滑鍙互浣跨敤 luaopen_...() 灝嗗嚱鏁板簱娣誨姞鍒扮姸鎬佷腑錛屽絎?10 琛屽埌絎?14 琛屾墍紺恒?/p>

絎?17 琛屽拰 luaL_loadbuffer() 浼氫粠 stdin 涓互鍧楃殑褰㈠紡鎺ユ敹杈撳叆錛屽茍瀵瑰叾榪涜緙栬瘧錛岀劧鍚庡皢鍏舵斁鍏ヨ櫄鎷熷爢鏍堜腑銆傜 18 琛屼粠鍫嗘爤涓脊鍑烘暟鎹茍鎵ц涔嬨傚鏋滃湪鎵ц鏃跺嚭鐜頒簡閿欒錛屽氨鍚戝爢鏍堜腑鍘嬪叆涓涓?Lua 瀛楃涓層傜 20 琛岃闂爤欏訛紙鏍堥《鐨勭儲寮曚負 -1錛変綔涓?Lua 瀛楃涓詫紝鎵撳嵃娑堟伅錛岀劧鍚庝粠鍫嗘爤涓垹闄よ鍊箋?/p>

浣跨敤 C API錛屾垜浠殑搴旂敤紼嬪簭涔熷彲浠ヨ繘鍏?Lua 鐘舵佹潵鎻愬彇淇℃伅銆備笅闈㈢殑浠g爜鐗囨浠?Lua 鐘舵佷腑鎻愬彇涓や釜鍏ㄥ眬鍙橀噺錛?/p>
..
if (luaL_loadfile(L, filename) || lua_pcall(L, 0, 0, 0))
  error(L, "cannot run configuration file: %s", lua_tostring(L, -1));

lua_getglobal(L, "width");
lua_getglobal(L, "height");
..
width = (int) lua_tonumber(L, -2);
height = (int) lua_tonumber(L, -1);
..

璇峰啀嬈℃敞鎰忎紶杈撴槸閫氳繃鍫嗘爤榪涜鐨勩備粠 C 涓皟鐢ㄤ換浣?Lua 鍑芥暟涓庤繖孌典唬鐮佺被浼鹼細浣跨敤 lua_getglobal() 鏉ヨ幏寰楀嚱鏁幫紝灝嗗弬鏁板帇鍏ュ爢鏍堬紝璋冪敤 lua_pcall()錛岀劧鍚庡鐞嗙粨鏋溿傚鏋?Lua 鍑芥暟榪斿洖 n 涓鹼紝閭d箞絎竴涓肩殑浣嶇疆鍦ㄥ爢鏍堢殑 -n 澶勶紝鏈鍚庝竴涓煎湪鍫嗘爤涓殑浣嶇疆鏄?-1銆?/p>

鍙嶄箣錛屽湪 Lua 涓皟鐢?C 鍑芥暟涔熶笌涔嬬被浼箋傚鏋滄偍鐨勬搷浣滅郴緇熸敮鎸佸姩鎬佸姞杞斤紝閭d箞 Lua 鍙互鏍規嵁闇瑕佹潵鍔ㄦ佸姞杞藉茍璋冪敤鍑芥暟銆傦紙鍦ㄥ繀欏諱嬌鐢ㄩ潤鎬佸姞杞界殑鎿嶄綔緋葷粺涓紝鍙互瀵?Lua 寮曟搸榪涜鎵╁厖錛屾鏃惰皟鐢?C 鍑芥暟鏃墮渶瑕侀噸鏂扮紪璇?Lua銆傦級





鍥為〉棣?/font>


緇撴潫璇?/font>

Lua 鏄竴縐嶅涔犺搗鏉ュ鏄撳緱闅句互緗俊鐨勮璦錛屼絾鏄畠綆鍗曠殑璇硶鍗存帺楗頒笉浜嗗叾寮哄ぇ鐨勫姛鑳斤細榪欑璇█鏀寔瀵硅薄錛堣繖涓?Perl 綾諱技錛夛紝鍏冭〃浣胯〃綾誨瀷鍏鋒湁鐩稿綋紼嬪害鐨勫彲浼稿睍鎬э紝C API 鍏佽鎴戜滑鍦ㄨ剼鏈拰瀹夸富璇█涔嬮棿榪涜鏇村ソ鐨勯泦鎴愬拰鎵╁厖銆侺ua 鍙互鍦?C銆丆++銆丆#銆丣ava鈩?鍜?Python 璇█涓嬌鐢ㄣ?/p>

鍦ㄥ垱寤哄彟澶栦竴涓厤緗枃浠舵垨璧勬簮鏍煎紡錛堜互鍙婄浉搴旂殑澶勭悊紼嬪簭錛変箣鍓嶏紝璇峰皾璇曚竴涓?Lua銆侺ua 璇█鍙婂叾紺懼尯闈炲父鍋ュ.錛屽叿鏈夊垱鏂扮簿紲烇紝闅忔椂鍑嗗濂芥彁渚涘府鍔┿?/p>



鍥為〉棣?/font>


鍙傝冭祫鏂?

瀛︿範

鑾峰緱浜у搧鍜屾妧鏈?/b>
  • 涓嬭澆 Lua 5.0.2 鎴?Lua 5.1 婧愪唬鐮侊紝浠庡ご寮濮嬬紪璇?Lua銆?

  • 鍦?Lua-users wiki 涓婏紝嫻忚寰堝棰勫厛鏋勫緩鐨勩佸彲瀹夎鐨?Lua 浜岃繘鍒舵枃浠躲?

  • 鍦?LuaForge 涓婂彲浠ユ壘鍒板ぇ閲忕殑浠g爜搴擄紝鍖呮嫭寰堝璇█緇戝畾鍜屼笓闂ㄧ殑璁$畻搴撱?

  • 璁㈣喘鍏嶈垂鐨?SEK for Linux 錛岃繖鏈変袱寮?DVD錛屽寘鎷渶鏂扮殑 IBM for Linux 璇曠敤杞歡錛屽寘鎷?DB2廬銆丩otus廬銆丷ational廬銆乀ivoli廬 鍜?WebSphere廬銆?

  • 鍦ㄦ偍鐨勪笅涓涓紑鍙戦」鐩腑閲囩敤 IBM 璇曠敤杞歡錛岃繖鍙互浠?developerWorks 鐩存帴涓嬭澆銆?


璁ㄨ






鍏充簬浣滆?/font>

Martin Streicher 鏄?Linux Magazine 鐨勯甯紪杈戙備粬鍦ㄦ櫘娓″ぇ瀛﹁幏寰椾簡璁$畻鏈虹澹浣嶏紝鑷?1982 騫翠互鏉ワ紝灝變竴鐩村湪浣跨敤 Pascal銆丆銆丳erl銆丣ava 浠ュ強錛堟渶榪戜嬌鐢ㄧ殑錛塕uby 緙栫▼璇█緙栧啓綾?Unix 緋葷粺銆?/p>



]]>
銆愯漿璐淬慙ua 5.0 鍙傝冩墜鍐?http://m.shnenglu.com/mybios/archive/2006/11/18/15335.html鏉庨敠淇?mybios)鏉庨敠淇?mybios)Sat, 18 Nov 2006 01:37:00 GMThttp://m.shnenglu.com/mybios/archive/2006/11/18/15335.htmlhttp://m.shnenglu.com/mybios/comments/15335.htmlhttp://m.shnenglu.com/mybios/archive/2006/11/18/15335.html#Feedback2http://m.shnenglu.com/mybios/comments/commentRss/15335.htmlhttp://m.shnenglu.com/mybios/services/trackbacks/15335.html闃呰鍏ㄦ枃

]]>
銆愯漿璐淬慙ua甯哥敤璧勬簮榪炴帴(鏉ヨ嚜lua-users) http://m.shnenglu.com/mybios/archive/2006/11/18/15334.html鏉庨敠淇?mybios)鏉庨敠淇?mybios)Sat, 18 Nov 2006 01:35:00 GMThttp://m.shnenglu.com/mybios/archive/2006/11/18/15334.htmlhttp://m.shnenglu.com/mybios/comments/15334.htmlhttp://m.shnenglu.com/mybios/archive/2006/11/18/15334.html#Feedback0http://m.shnenglu.com/mybios/comments/commentRss/15334.htmlhttp://m.shnenglu.com/mybios/services/trackbacks/15334.html
  • 瀹樻柟璧勬簮聽
  • Lua紺懼尯聽
  • Lua聽鏂囨。
    • [Lua鏋舵瀯] - 鎻忚堪浜哃ua鐨勪笟鍔¢┍鍔ㄦ柟寮忥紝鐩殑浠ュ強鏋舵瀯瑙e喅鏂規銆?/li>
  • 甯︽湁渚嬭瘉鐨凩ua鏂囨。
  • Lua聽鏁欑▼
  • 璁よ瘉鑰冭瘯聽
  • Benchmarks
  • 璇█姣旇緝聽
  • Lua 鍏朵粬鐩稿叧绔欑偣


  • ]]>
    青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲在线观看| 韩国v欧美v日本v亚洲v| 亚洲精品免费一区二区三区| 亚洲男人的天堂在线aⅴ视频| 亚洲卡通欧美制服中文| 亚洲国产欧美久久| 亚洲理论在线观看| 一本色道久久综合狠狠躁篇怎么玩 | 午夜久久一区| 亚洲午夜精品视频| 午夜精品久久久久久久99水蜜桃 | 亚洲成色最大综合在线| 欧美成人精品| 日韩视频一区二区三区| 午夜精品久久久久久久| 久久夜色精品国产亚洲aⅴ| 欧美高清视频一区| 91久久国产自产拍夜夜嗨| 亚洲国产三级在线| 一级成人国产| 欧美影院一区| 另类激情亚洲| 亚洲一区二区高清视频| 亚洲综合首页| 女同性一区二区三区人了人一 | 亚洲图色在线| 欧美一级久久| 亚洲一级黄色| 亚洲婷婷综合久久一本伊一区| 日韩亚洲欧美成人| 久久综合久久综合久久| 国产精品成av人在线视午夜片| 国外成人在线| 亚洲国产小视频在线观看| 一区二区av在线| 亚洲综合99| 亚洲欧美日韩另类| 亚洲视屏在线播放| 亚洲伦理在线观看| 亚洲看片一区| 一区二区三区无毛| 久久久久久久综合狠狠综合| 欧美日韩免费观看一区三区| 欧美精品一区在线发布| 欧美成人一区二区三区| 欧美在线视频日韩| 久久高清一区| 亚洲男人的天堂在线| 在线观看欧美日本| 久久精品免费| 久久久国产成人精品| 亚洲激情在线| 久久精品国产v日韩v亚洲 | 伊人成人网在线看| 午夜电影亚洲| 一区二区毛片| 久久精品国产一区二区电影| 亚洲国产综合在线看不卡| 亚洲欧美另类综合偷拍| 国内精品**久久毛片app| 91久久精品美女| 国产伦精品一区二区三| 亚洲第一天堂av| 国产乱码精品1区2区3区| 91久久久精品| 在线观看精品视频| 久久综合激情| 裸体丰满少妇做受久久99精品| 国产精品黄视频| 一区二区欧美日韩视频| 欧美一区二区三区在线视频| 亚洲综合清纯丝袜自拍| 久久久国产亚洲精品| 欧美在线一二三四区| 欧美一区免费视频| 亚洲欧美日韩国产中文| 久久综合久久美利坚合众国| 在线欧美亚洲| 欧美成人精品在线播放| 免费视频亚洲| 中文亚洲免费| 亚洲欧美日韩成人| 激情亚洲成人| 亚洲人成毛片在线播放| 欧美日韩成人在线观看| 亚洲免费在线精品一区| 欧美一区二区播放| 亚洲黄色有码视频| 亚洲精品一区二区在线观看| 亚洲精品永久免费精品| 欧美视频在线免费| 久久视频这里只有精品| 欧美成人网在线| 性欧美1819性猛交| 老司机精品视频一区二区三区| 一本久久a久久精品亚洲| 性色av香蕉一区二区| 亚洲国产一区二区精品专区| 中国日韩欧美久久久久久久久| 黄网站免费久久| 亚洲精品视频在线看| 国产欧美精品久久| 欧美激情一区二区久久久| 国产精品久久一级| 亚洲福利专区| 国产偷自视频区视频一区二区| 亚洲国产mv| 狠狠色狠狠色综合日日五| 一区二区成人精品| 亚洲国产三级| 欧美尤物一区| 亚洲欧美日韩天堂| 欧美精品在欧美一区二区少妇| 久久精品国产亚洲一区二区三区| 欧美日韩国产成人| 美女视频黄a大片欧美| 国产精品久久久久久影视| 亚洲盗摄视频| 一区视频在线| 欧美一级淫片播放口| 亚洲一区综合| 欧美理论大片| 欧美华人在线视频| 在线播放豆国产99亚洲| 一区二区三区日韩欧美精品| 日韩视频永久免费| 久久青草久久| 欧美成人免费全部观看天天性色| 国产欧美在线观看| 亚洲午夜极品| 亚洲午夜女主播在线直播| 欧美欧美天天天天操| 欧美激情国产日韩精品一区18| 国内精品嫩模av私拍在线观看| 中文在线不卡视频| 亚洲国产成人精品久久| 国产一区二区电影在线观看| 国产精品夜色7777狼人| 亚洲第一网站| 亚洲国产精品女人久久久| 久久精品国产视频| 亚洲欧美在线一区二区| 欧美成人午夜视频| 亚洲电影视频在线| 亚洲激情av| 美女视频一区免费观看| 欧美不卡视频一区发布| 精品91在线| 老司机一区二区| 欧美国产日本| 日韩亚洲欧美在线观看| 欧美日韩精品欧美日韩精品| 一区二区欧美日韩| 久久精品视频免费播放| 国产午夜精品美女毛片视频| 欧美中文字幕在线播放| 欧美性天天影院| 亚洲小视频在线观看| 亚洲视频免费在线| 国产精品二区在线| 亚洲女性裸体视频| 欧美资源在线观看| 在线观看亚洲视频| 欧美激情视频免费观看| 99国产成+人+综合+亚洲欧美| 午夜国产精品影院在线观看| 激情久久久久久久久久久久久久久久| 久久久亚洲精品一区二区三区| 亚洲电影在线观看| 午夜精品久久久久久99热| 亚洲国产电影| 欧美裸体一区二区三区| 香蕉免费一区二区三区在线观看| 久久久久久久一区二区三区| 亚洲毛片在线| 国产农村妇女毛片精品久久莱园子| 久久蜜桃av一区精品变态类天堂| 亚洲人被黑人高潮完整版| 欧美一区二区三区在线| 亚洲人成网站777色婷婷| 欧美无乱码久久久免费午夜一区| 久久精品人人爽| 一本到12不卡视频在线dvd| 久久久久国产精品人| 99天天综合性| 亚洲国产精品v| 国产欧美日韩在线视频| 欧美福利视频一区| 欧美影院久久久| 亚洲午夜电影网| 亚洲精品视频一区| 免费视频久久| 久久精品亚洲热| 亚洲午夜日本在线观看| 在线观看日韩av先锋影音电影院| 欧美午夜精品久久久| 久久精品日产第一区二区| 亚洲特级毛片| 亚洲第一色在线| 免费不卡亚洲欧美|