锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鍋氬畬涔嬪悗鏁寸悊錛宭ua, luabind 浠dk 褰㈠紡緇勭粐濂斤紝鎴戞槸榪欐牱緇勭粐:
\luabind_build\sdk\luabind\include
\luabind_build\sdk\luabind\msvc-9.0-sp1\lib
\luabind_build\sdk\lua\include
\luabind_build\sdk\lua\msvc-9.0-sp1\lib
榪欐牱錛屾妸sdk涓殑涓滀笢淇濆瓨涓浠斤紝鏂逛究浠ュ悗浣跨敤銆傚啓涓涓狹FC灝忕▼搴忔祴璇?br>
2 //mfc class function
3 void CMFC_LuaDlg::SetEditText(const char* text)
4 {
5 Edit_1.SetWindowText(text);
6 UpdateData(FALSE);
7 }
8 //register
9 luabind::module(L)
10 [
11 luabind::class_<CMFC_LuaDlg>("mfc_dlg")
12 .def"set_text",&CMFC_LuaDlg::SetEditText)
13 ];
14 //load lua file
15 if (0==luaL_dofile(L,filepath))
16 {
17 ret=true;
18 }
19 //run lua function
20 luabind::call_function<void>(L,"update_text",dlg);
21
2 dlg:set_text("浣犲ソ錛屾榪庢潵鍒發(fā)ua 鑴氭湰涓栫晫")
3 end
]]>
褰撶劧lua 鏄痗, python 鏄痗++,灝辮繛luabind 鍜?nbsp; boost.python 閮藉樊涓嶅錛屼笉榪囨渶鍚庝竴鐐逛笉濂囨紝luabind 鏄粠boost.python鑾峰緱浜?jiǎn)璁稿鐏垫?
for namelist in iterator do
block
end
鍏朵腑iterator鏄竴涓凱浠e櫒鍑芥暟錛屽畠鍙互鏈変竴涓垨澶氫釜榪斿洖鍊鹼紝namelist鏄楀彿鍒嗛殧鐨勫驚鐜彉閲忓悕鍒楄〃錛岀敤鏉ユ帴鏀舵瘡嬈¤皟鐢ㄨ凱浠e櫒鍑芥暟寰楀埌鐨勮繑鍥炲箋傝繖孌電▼搴忕殑璇箟涓庝笅闈㈠艦寮忕殑浠g爜鐩稿悓:
while true do
local namelist = iterator()
if nil == first(namelist) then break end
block
end
first(namelist)琛ㄧずnamelist鐨勭涓涓彉閲忓悕銆?/font>
Lua宸茬粡鎻愪緵浜?jiǎn)鑻ヲq蹭釜甯哥敤鐨勮凱浠e櫒鐢熸垚鍑芥暟錛屾渶甯歌鐨勫氨鏄痠pairs鍜宲airs銆俰pairs(t)浠ヤ竴涓猼able浣滀負(fù)鍙傛暟錛岀敓鎴愪竴涓緷嬈¤繑鍥?1,t[1])銆?2,t[2])銆?3,t[3])......鐨勮凱浠e櫒銆備笅闈㈣繖孌典唬鐮?/font>
t = {"Monday","Tuesday", "Wednesday","Thursday", "Friday","Saturday","Sunday"}
for i,v in ipairs(t) do
print(i,v)
end
灝嗕細(xì)鎵撳嵃鍑?/font>
1 Monday
2 Tuesday
3 Wednesday
4 Thursday
5 Friday
6 Saturday
7 Sunday
銆俻airs鍚屾牱鐢ㄤ竴涓猼able浣滀負(fù)鍙傛暟錛屽畠鐢熸垚鐨勮凱浠e櫒渚濇榪斿洖璇ヨ〃涓墍鏈夌殑key鍜寁alue銆?/font>
Generic for鎼厤ipairs鍜宲airs鐢ㄨ搗鏉ョ浉褰撴柟渚匡紝浣嗘槸瀹冧滑鍗存湁涓涓緢闅懼療瑙夌殑緙洪櫡銆傜湅鐪嬭繖孌典唬鐮?
for i,v in ipairs(t) do
print(i,v)
-- some code changes i
i = 0
end
璁稿浜?鍖呮嫭鎴?閮界寽涓嶅嚭瀹冪珶鐒朵細(xì)涓嶅仠鍦扮柉鐙傛墦鍗?/font>
1 Monday
錛屽鏋滅敤pairs鏇夸唬ipairs涔熶笉浼?xì)濂藉埌鍝噷鍘? 鍦ㄦ墦鍗板嚭涓琛屾暟鎹悗渚挎姏鍑轟釜 invalid key for `next' 閿欒銆?/font>
鐢辨鍙煡錛屼嬌鐢ㄤ簡(jiǎn)ipairs鍜宲airs鐨凣eneric for鍦ㄨ涔変笌涓婃枃while true ... end褰㈠紡鐨勪唬鐮佸茍涓嶅畬鍏ㄧ浉鍚岋紝瀹冧滑鐢熸垚鐨勮凱浠e櫒闇瑕佷嬌鐢ㄥ驚鐜彉閲忥紝鑰屽鏋滃驚鐜綋鏀瑰彉浜?jiǎn)弩@鐜彉閲忓肩殑璇濓紝閭d箞榪唬鍣ㄥ氨寰堝彲鑳戒細(xì)璞″湪鏈緥涓偅鏍鋒壘涓嶇潃鍖椾簡(jiǎn)銆傚洜姝わ紝銆奝rogramming in Lua銆嬬殑4.3.5涓究鏈夎繖涔堜竴孌佃皢璋嗗憡璇? “The generic loop shares two properties with the numeric loop: The loop variables are local to the loop body and you should never assign any value to the loop variables. "銆?/font>
ipairs鍜宲airs鐨勮繖涓己闄鋒槸鐢變簬瀹冧滑瑕佺敤褰撳墠寰幆鍙橀噺鐨勫兼潵浣滀負(fù)涓嬩竴嬈¤凱浠g殑璧風(fēng)偣錛岄偅涔堣繖鏄笉鏄繀闇鐨勫憿錛熷綋鐒朵笉鏄紝鎴戜滑瀹屽叏鍙互閫氳繃closure鏉ュ疄鐜頒竴涓洿瀹夊叏鐨刬pairs :
function myipairs (t)
local i = 0
local n = table.getn(t)
return function ()
i = i + 1
if i <= n then return i,t[i] end
end
end
t = {"Monday","Tuesday", "Wednesday","Thursday", "Friday","Saturday","Sunday"}
for i,v in myipairs(t) do
print(i,v)
-- some code changes i
i = 0
end
璇曡瘯涓婇潰榪欐浠g爜錛屾庝箞鏍鳳紵鏄笉鏄伐浣滃緱寰堝ソ錛熶負(fù)浠涔堝畠涓嶄細(xì)鍙戠柉錛熷叾瀹炲緢綆鍗曪紝myipairs鐢熸垚鐨勮凱浠e櫒(涓涓猚losure)鎶婇渶瑕佺敤鍒扮殑榪唬淇℃伅淇濆瓨鍒板畠鐨剈pvalue(i鍜宯)涓紝榪欐牱鍗充嬌寰幆浣撴洿鏀逛簡(jiǎn)寰幆鍙橀噺涔熶笉浼?xì)濯?jiǎng)鍝嶅埌榪唬鐘舵併傛劅璋losure錛屾垜浠粓浜庡彲浠ユ斁蹇?jī)澶ц儐鍦熬_楀績(jī)涓鐐逛簡(jiǎn)錛乛_^
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=564518
function f1(n)
-- 鍑芥暟鍙傛暟涔熸槸灞閮ㄥ彉閲?/font>
local function f2()
print(n) -- 寮曠敤澶栧寘鍑芥暟鐨勫眬閮ㄥ彉閲?/font>
end
return f2
end
g1 = f1(1979)
g1() -- 鎵撳嵃鍑?979
g2 = f1(500)
g2() -- 鎵撳嵃鍑?00
褰撴墽琛屽畬g1 = f1(1979)鍚庯紝灞閮ㄥ彉閲弉鐨勭敓鍛芥湰璇ョ粨鏉燂紝浣嗗洜涓哄畠宸茬粡鎴愪簡(jiǎn)鍐呭祵鍑芥暟f2(瀹冨張琚祴緇欎簡(jiǎn)鍙橀噺g1)鐨剈pvalue錛屾墍浠ュ畠浠嶇劧鑳戒互鏌愮褰㈠紡緇х畫“瀛樻椿”涓嬫潵錛屼粠鑰屼護(hù)g1()鎵撳嵃鍑烘紜殑鍊箋?/p>
鍙負(fù)浠涔坓2涓巊1鐨勫嚱鏁頒綋涓鏍?閮芥槸f1鐨勫唴宓屽嚱鏁癴2鐨勫嚱鏁頒綋)錛屼絾鎵撳嵃鍊間笉鍚岋紵榪欏氨娑夊強(qiáng)鍒頒竴涓浉褰撻噸瑕佺殑姒傚康鈥斺旈棴鍖?closure)銆備簨瀹炰笂錛孡ua緙栬瘧涓涓嚱鏁版椂錛屼細(xì)涓哄畠鐢熸垚涓涓師鍨?prototype)錛屽叾涓寘鍚簡(jiǎn)鍑芥暟浣撳搴旂殑铏氭嫙鏈烘寚浠ゃ佸嚱鏁扮敤鍒扮殑甯擱噺鍊?鏁幫紝鏂囨湰瀛楃涓茬瓑絳?鍜屼竴浜涜皟璇曚俊鎭傚湪榪愯鏃訛紝姣忓綋Lua鎵ц涓涓艦濡俧unction...end 榪欐牱鐨勮〃杈懼紡鏃訛紝瀹冨氨浼?xì)鍒涘晦Z竴涓柊鐨勬暟鎹璞★紝鍏朵腑鍖呭惈浜?jiǎn)鐩稿簲鍑芥暟鍘熷瀷鐨勫紩鐢ㄣ佺幆澧?environment錛岀敤鏉ユ煡鎵懼叏灞鍙橀噺鐨勮〃)鐨勫紩鐢ㄤ互鍙?qiáng)涓涓敱鎵鏈塽pvalue寮曠敤緇勬垚鐨勬暟緇勶紝鑰岃繖涓暟鎹璞″氨縐頒負(fù)闂寘銆傜敱姝ゅ彲瑙侊紝鍑芥暟鏄紪璇戞湡姒傚康錛屾槸闈?rùn)鎬佺殑錛岃岄棴鍖呮槸榪愯鏈熸蹇碉紝鏄姩鎬佺殑銆俫1鍜実2鐨勫間弗鏍兼潵璇翠笉鏄嚱鏁拌屾槸闂寘錛屽茍涓旀槸涓や釜涓嶇浉鍚岀殑闂寘錛岃屾瘡涓棴鍖呭彲浠ヤ繚鏈夎嚜宸辯殑upvalue鍊鹼紝鎵浠1鍜実2鎵撳嵃鍑虹殑緇撴灉褰撶劧灝變笉涓鏍蜂簡(jiǎn)銆傝櫧鐒墮棴鍖呭拰鍑芥暟鏄湰璐ㄤ笉鍚岀殑姒傚康錛屼絾涓轟簡(jiǎn)鏂逛究錛屼笖鍦ㄤ笉寮曡搗娣鋒穯鐨勬儏鍐典笅錛屾垜浠瀹冧滑涓嶅仛鍖哄垎銆?/p>
浣跨敤upvalue寰堟柟渚匡紝浣嗗畠浠殑璇箟涔熷緢寰錛岄渶瑕佸紩璧鋒敞鎰忋傛瘮濡傚皢f1鍑芥暟鏀規(guī)垚錛?br>
function f1(n)
local function f2()
print(n)
end
n = n + 10
return f2
end
g1 = f1(1979)
g1() -- 鎵撳嵃鍑?989
鍐呭祵鍑芥暟瀹氫箟鍦╪ = n + 10榪欐潯璇彞涔嬪墠錛屽彲涓轟粈涔坓1()鎵撳嵃鍑虹殑鍗存槸1989錛焨pvalue瀹為檯鏄眬閮ㄥ彉閲忥紝鑰屽眬閮ㄥ彉閲忔槸淇濆瓨鍦ㄥ嚱鏁板爢鏍堟鏋朵笂(stack frame)鐨勶紝鎵浠ュ彧瑕乽pvalue榪樻病鏈夌寮鑷繁鐨勪綔鐢ㄥ煙錛屽畠?yōu)兏鐩寸敓瀛樺湪鍑芥暟鍫嗘爤涓娿傝繖縐嶆儏鍐典笅錛岄棴鍖呭皢閫氳繃鎸囧悜鍫嗘爤涓婄殑upvalue鐨勫紩鐢ㄦ潵璁塊棶瀹冧滑錛屼竴鏃pvalue鍗沖皢紱誨紑鑷繁鐨勪綔鐢ㄥ煙(榪欎篃鎰忓懗鐫瀹冮┈涓婅浠庡爢鏍堜腑娑堝け)錛岄棴鍖呭氨浼?xì)湄?fù)瀹冨垎閰嶇┖闂村茍淇濆瓨褰撳墠鐨勫鹼紝浠ュ悗渚垮彲閫氳繃鎸囧悜鏂板垎閰嶇┖闂寸殑寮曠敤鏉ヨ闂upvalue銆傚綋鎵ц鍒癴1(1979)鐨刵 = n + 10鏃訛紝闂寘宸茬粡鍒涘緩浜?jiǎn)锛屼絾鏄痭騫舵病鏈夌寮浣滅敤鍩燂紝鎵浠ラ棴鍖呬粛鐒跺紩鐢ㄥ爢鏍堜笂鐨刵錛屽綋return f2瀹屾垚鏃訛紝n鍗沖皢緇撴潫鐢熷懡錛屾鏃墮棴鍖呬究灝唍(宸茬粡鏄?989浜?澶嶅埗鍒拌嚜宸辯鐞嗙殑絀洪棿涓互渚垮皢鏉ヨ闂傚紕娓呮浜?jiǎn)鍐呴儴鐨効U樺瘑鍚庯紝榪愯緇撴灉灝變笉闅捐В閲婁簡(jiǎn)銆?/p>
upvalue榪樺彲浠ヤ負(fù)闂寘涔嬮棿鎻愪緵涓縐嶆暟鎹叡浜殑鏈哄埗銆傝瘯鐪嬩笅渚嬶細(xì)
function Create(n)
local function foo1()
print(n)
end
local function foo2()
n = n + 10
end
return foo1,foo2
end
f1,f2 = Create(1979)
f1() -- 鎵撳嵃1979
f2()
f1() -- 鎵撳嵃1989
f2()
f1() -- 鎵撳嵃1999
f1,f2榪欎袱涓棴鍖呯殑鍘熷瀷鍒嗗埆鏄疌reate涓殑鍐呭祵鍑芥暟foo1鍜宖oo2錛岃宖oo1鍜宖oo2寮曠敤鐨剈pvalue鏄悓涓涓紝鍗矯reate鐨勫眬閮ㄥ彉閲弉銆傚墠闈㈠凡璇磋繃錛屾墽琛屽畬Create璋冪敤鍚庯紝闂寘浼?xì)鎶婂爢鏍堜笂n鐨勫煎鍒跺嚭鏉ワ紝閭d箞鏄惁f1鍜宖2灝卞垎鍒嫢鏈変竴涓猲鐨勬嫹璐濆憿錛熷叾瀹炰笉鐒?dòng)灱屽綋Lua鍙戠幇涓や釜闂寘鐨剈pvalue鎸囧悜鐨勬槸褰撳墠鍫嗘爤涓婄殑鐩稿悓鍙橀噺鏃訛紝浼?xì)鑱槑鍦板彧鐢熸垚涓涓嫹璐濓紝鐒跺悗璁╄繖涓や釜闂寘鍏變韓璇ユ嫹璐濓紝榪欐牱浠諱竴涓棴鍖呭璇pvalue榪涜淇敼閮戒細(xì)琚彟涓涓帰鐭ャ備笂榪頒緥瀛愬緢娓呮鍦拌鏄庝簡(jiǎn)榪欑偣錛氭瘡嬈¤皟鐢╢2閮藉皢upvalue鐨勫煎鍔犱簡(jiǎn)10錛岄殢鍚巉1灝嗘洿鏂板悗鐨勫兼墦鍗板嚭鏉ャ倁pvalue鐨勮繖縐嶈涔夊緢鏈変環(huán)鍊鹼紝瀹冧嬌寰楅棴鍖呬箣闂村彲浠ヤ笉渚濊禆鍏ㄥ眬鍙橀噺榪涜閫氳錛屼粠鑰屼嬌浠g爜鐨勫彲闈犳уぇ澶ф彁楂樸?/p>
闂寘鍦ㄥ垱寤轟箣鏃跺叾upvalue灝卞凡緇忎笉鍦ㄥ爢鏍堜笂鐨勬儏鍐典篃鏈夊彲鑳藉彂鐢燂紝榪欐槸鍥犱負(fù)鍐呭祵鍑芥暟鍙互寮曠敤鏇村灞傚鍖呭嚱鏁扮殑灞閮ㄥ彉閲忥細(xì)
function Test(n)
local function foo()
local function inner1()
print(n)
end
local function inner2()
n = n + 10
end
return inner1,inner2
end
return foo
end
t = Test(1979)
f1,f2 = t()
f1() -- 鎵撳嵃1979
f2()
f1() -- 鎵撳嵃1989
g1,g2 = t()
g1() -- 鎵撳嵃1989
g2()
g1() -- 鎵撳嵃1999
f1() -- 鎵撳嵃1999
鎵ц瀹宼 = Test(1979)鍚庯紝Test鐨勫眬閮ㄥ彉閲弉灝?#8220;姝?#8221;浜?jiǎn)锛屾墍浠ュ綋f1,f2榪欎袱涓棴鍖呰鍒涘緩鏃跺爢鏍堜笂鏍規(guī)湰鎵句笉鍒皀鐨勮釜褰憋紝榪欏彨瀹冧滑濡備綍鍙栧緱n鐨勫煎憿錛熷懙鍛碉紝涓嶈蹇樹簡(jiǎn)Test鍑芥暟鐨刵涓嶄粎浠呮槸inner1鍜宨nner2鐨剈pvalue錛屽悓鏃跺畠涔熸槸foo鐨剈pvalue銆倀 = Test(1979)涔嬪悗錛宼榪欎釜闂寘涓瀹氬凡緇忔妸n濡ュ杽淇濆瓨濂戒簡(jiǎn)錛屼箣鍚巉1銆乫2濡傛灉鍦ㄥ綋鍓嶅爢鏍堜笂鎵句笉鍒皀灝變細(xì)鑷姩鍒板畠浠殑澶栧寘闂寘(濮戜笖榪欎箞鍙?鐨剈pvalue寮曠敤鏁扮粍涓幓鎵撅紝騫舵妸鎵懼埌鐨勫紩鐢ㄥ兼嫹璐濆埌鑷繁鐨剈pvalue寮曠敤鏁扮粍涓備粩緇嗚瀵熶笂榪頒唬鐮侊紝鍙互鍒ゅ畾g1鍜実2涓巉1鍜宖2鍏變韓鍚屼竴涓猽pvalue銆傝繖鏄負(fù)浠涔堝憿錛熷叾瀹烇紝g1鍜実2涓巉1鍜宖2閮芥槸鍚屼竴涓棴鍖?t)鍒涘緩鐨勶紝鎵浠ュ畠浠紩鐢ㄧ殑upvalue(n)瀹為檯涔熸槸鍚屼竴涓彉閲忥紝鑰屽垰鎵嶆弿榪扮殑鎼滅儲(chǔ)鏈哄埗鍒欎繚璇佷簡(jiǎn)鏈鍚庡畠浠殑upvalue寮曠敤閮戒細(xì)鎸囧悜鍚屼竴涓湴鏂廣?/p>