锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久男人Av资源网站无码软件,伊人伊成久久人综合网777,久久99精品国产99久久6http://m.shnenglu.com/swo2006/category/3195.htmlzh-cnFri, 23 May 2008 01:09:47 GMTFri, 23 May 2008 01:09:47 GMT60灝嗗瓧絎︿覆鎸夆滐紝鈥濆垎鍓?lua鍑芥暟)http://m.shnenglu.com/swo2006/articles/16000.htmlswoswoTue, 05 Dec 2006 02:10:00 GMThttp://m.shnenglu.com/swo2006/articles/16000.htmlhttp://m.shnenglu.com/swo2006/comments/16000.htmlhttp://m.shnenglu.com/swo2006/articles/16000.html#Feedback0http://m.shnenglu.com/swo2006/comments/commentRss/16000.htmlhttp://m.shnenglu.com/swo2006/services/trackbacks/16000.html
This is intended to do the reverse of table.concat. That is, it takes a string and generates a table of entries, delimited by single-character delimiters (such as comma or newline).

Example:


test = "the,quick,brown,dog,jumped"

t = utils.split (test, ",")

tprint (t)

print (table.concat (t, ","))

Output:

1="the"
2="quick"
3="brown"
4="dog"
5="jumped"

the,quick,brown,dog,jumped


You pass utils.split 2 or 3 arguments:


  1. The string to be split

  2. The single-character delimiter

  3. (optional) the maximum number of splits to do



If the 3rd argument is not supplied, or is zero, then the entire string is split. Otherwise, it will be split the number of times you specify. eg.


t = utils.split (test, ",", 2)

tprint (t)

Output:

1="the"
2="quick"
3="brown,dog,jumped"


In this case the remaining text is placed in the 3rd table item.


static int l_split (lua_State *L) {
const char *s = luaL_checkstring(L, 1);
const char *sep = luaL_checkstring(L, 2);
const int count = (int) luaL_optnumber (L, 3, 0);
char *e;
int i = 1;

if (strlen (sep) != 1)
luaL_error (L, "Separator must be a single character");

if (count < 0)
luaL_error (L, "Count must be positive or zero");

lua_newtable(L); /* result */

/* repeat for each separator */
while ((e = strchr(s, *sep)) != NULL &&
(count == 0 || i <= count))
{
lua_pushlstring(L, s, e-s); /* push substring */
lua_rawseti(L, -2, i++);
s = e + 1; /* skip separator */
}

/* push last substring */
lua_pushstring(L, s);
lua_rawseti(L, -2, i);

return 1; /* return the table */
}

function split (s, delim)

assert (type (delim) == "string" and string.len (delim) > 0,
"bad delimiter")

local start = 1
local t = {} -- results table

-- find each instance of a string followed by the delimiter

while true do
local pos = string.find (s, delim, start, true) -- plain find

if not pos then
break
end

table.insert (t, string.sub (s, start, pos - 1))
start = pos + string.len (delim)
end -- while

-- insert final one (after last delimiter)

table.insert (t, string.sub (s, start))

return t

end -- function split


swo 2006-12-05 10:10 鍙戣〃璇勮
]]>
Lua鐨勫浠誨姟鏈哄埗鈥斺斿崗紼?coroutine) http://m.shnenglu.com/swo2006/articles/15781.htmlswoswoWed, 29 Nov 2006 06:30:00 GMThttp://m.shnenglu.com/swo2006/articles/15781.htmlhttp://m.shnenglu.com/swo2006/comments/15781.htmlhttp://m.shnenglu.com/swo2006/articles/15781.html#Feedback0http://m.shnenglu.com/swo2006/comments/commentRss/15781.htmlhttp://m.shnenglu.com/swo2006/services/trackbacks/15781.html銆銆銆銆鍗忕▼(coroutine)鎶鏈槸涓縐嶇▼搴忔帶鍒舵満鍒訛紝鏃╁湪涓婁笘綰?0騫翠唬灝卞凡 鎻愬嚭錛岀敤瀹冨彲浠ュ緢鏂逛究鍦板疄鐜板崗浣滃紡澶氫換鍔°傚湪涓繪祦鐨勭▼搴忚璦(濡侰++銆丣ava銆丳ascal絳?閲屾垜浠緢灝戣兘鐪嬪埌鍗忕▼鐨勮韓褰憋紝浣嗘槸鐜板湪涓嶅皯鍔ㄦ佽剼鏈 璦(Python銆丳erl)鍗撮兘鎻愪緵浜?jiǎn)鍗徑E嬫垨涓庝箣鐩鎬技鐨勬満鍒訛紝鍏朵腑鏈紿佸嚭鐨勪究鏄疞ua銆?br />銆銆
銆銆銆銆Lua璇█瀹炵幇鐨勫崗紼嬫槸涓縐嶉潪瀵圭О 寮?asymmetric)鍗忕▼錛屾垨縐板崐瀵圭О寮?semi-asymmetric)鍗忕▼錛屽張鎴栧共鑴嗗氨鍙崐鍗忕▼(semi-coroutine)銆傝繖縐嶅崗紼? 鏈哄埗涔嬫墍浠ヨ縐頒負(fù)闈炲縐扮殑錛屾槸鍥犱負(fù)瀹冩彁渚涗簡(jiǎn)涓ょ浼犻掔▼搴忔帶鍒舵潈鐨勬搷浣滐細(xì)涓縐嶆槸(閲?璋冪敤鍗忕▼(閫氳繃coroutine.resume)錛涘彟涓縐嶆槸鎸傝搗鍗忕▼ 騫跺皢紼嬪簭鎺у埗鏉冭繑鍥炵粰鍗忕▼鐨勮皟鐢ㄨ?閫氳繃coroutine.yield)銆備竴涓潪瀵圭О鍗忕▼鍙互鐪嬪仛鏄粠灞炰簬瀹冪殑璋冪敤鑰呯殑錛屼簩鑰呯殑鍏崇郴闈炲父綾諱技浜庝緥紼? (routine)涓庡叾璋冪敤鑰呬箣闂寸殑鍏崇郴銆傛棦鐒舵湁闈炲縐板紡鍗忕▼錛屽綋鐒朵篃灝辨湁瀵圭О寮?symmetric)鍗忕▼浜?jiǎn)锛屽畠鐨勭壒鐐规槸鍙湁涓縐嶄紶閫掔▼搴忔帶鍒舵潈鐨勬搷 浣滐紝鍗沖皢鎺у埗鏉冪洿鎺ヤ紶閫掔粰鎸囧畾鐨勫崗紼嬨傛浘緇忔湁榪欎箞涓縐嶈娉曪紝瀵圭О寮忓拰闈炲縐板紡鍗忕▼鏈哄埗鐨勮兘鍔涘茍涓嶇瓑浠鳳紝浣嗕簨瀹炰笂寰堝鏄撴牴鎹墠鑰呮潵瀹炵幇鍚庤呫傛帴涓嬫潵鎴戜滑灝辯敤 浠g爜鏉ヨ瘉鏄庤繖涓簨瀹炪?br />銆銆
銆銆--瀵圭О寮忓崗紼嬪簱coro.lua
銆銆
銆銆coro = {}
銆銆--coro.main鐢ㄦ潵鏍囪瘑紼嬪簭鐨勪富鍑芥暟
銆銆coro.main = function() end
銆銆-- coro.current鍙橀噺鐢ㄦ潵鏍囪瘑鎷ユ湁鎺у埗鏉冪殑鍗忕▼錛?br />銆銆-- 涔熷嵆姝e湪榪愯鐨勫綋鍓嶅崗紼?br />銆銆coro.current = coro.main
銆銆
銆銆-- 鍒涘緩涓涓柊鐨勫崗紼?br />銆銆function coro.create(f)
銆銆銆 return coroutine.wrap(function(val)
銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆return nil,f(val)
銆銆銆銆銆銆銆銆銆銆銆銆銆銆 end)
銆銆end
銆銆
銆銆-- 鎶婃帶鍒舵潈鍙?qiáng)鎸囧畾鐨勬暟鎹畍al浼犵粰鍗忕▼k
銆銆function coro.transfer(k,val)
銆銆銆 if coro.current ~= coro.main then
銆銆銆銆銆return coroutine.yield(k,val)
銆銆銆 else
銆銆銆銆銆-- 鎺у埗鏉冨垎媧懼驚鐜?br />銆銆銆銆銆while k do
銆銆銆銆銆銆 coro.current = k
銆銆銆銆銆銆 if k == coro.main then
銆銆銆銆銆銆銆銆return val
銆銆銆銆銆銆 end
銆銆銆銆銆銆 k,val = k(val)
銆銆銆銆銆end
銆銆銆銆銆error("coroutine ended without transfering control...")
銆銆銆 end
銆銆end
銆銆
銆銆濡傛灉鏆傛椂榪樺紕涓嶆噦涓婇潰鐨勭▼搴忥紝娌″叧緋伙紝鐪嬬湅濡備綍浣跨敤榪欎釜搴撳悗鍐嶅洖澶村垎鏋愩備笅闈㈡槸浣跨敤紺轟緥錛?br />銆銆
銆銆require("coro.lua")
銆銆
銆銆function foo1(n)
銆銆銆 print("1: foo1 received value "..n)
銆銆銆 n = coro.transfer(foo2,n + 10)
銆銆銆 print("2: foo1 received value "..n)
銆銆銆 n = coro.transfer(coro.main,n + 10)
銆銆銆 print("3: foo1 received value "..n)
銆銆銆 coro.transfer(coro.main,n + 10)
銆銆end
銆銆
銆銆function foo2(n)
銆銆銆 print("1: foo2 received value "..n)
銆銆銆 n = coro.transfer(coro.main,n + 10)
銆銆銆 print("2: foo2 received value "..n)
銆銆銆 coro.transfer(foo1,n + 10)
銆銆end
銆銆
銆銆function main()
銆銆銆 foo1 = coro.create(foo1)
銆銆銆 foo2 = coro.create(foo2)
銆銆銆 local n = coro.transfer(foo1,0)
銆銆銆 print("1: main received value "..n)
銆銆銆 n = coro.transfer(foo2,n + 10)
銆銆銆 print("2: main received value "..n)
銆銆銆 n = coro.transfer(foo1,n + 10)
銆銆銆 print("3: main received value "..n)
銆銆end
銆銆
銆銆--鎶妋ain璁句負(fù)涓誨嚱鏁?鍗忕▼)
銆銆coro.main = main
銆銆--灝哻oro.main璁句負(fù)褰撳墠鍗忕▼
銆銆coro.current = coro.main
銆銆--寮濮嬫墽琛屼富鍑芥暟(鍗忕▼)
銆銆coro.main()
銆銆
銆銆
銆 銆涓婇潰鐨勭ず渚嬪畾涔変簡(jiǎn)涓涓悕涓簃ain鐨勪富鍑芥暟錛屾暣涓▼搴忕敱瀹冭屽錛屼篃鍥犲畠鑰岀粓銆備負(fù)浠涔堥渶瑕佷竴涓繖鏍風(fēng)殑涓誨嚱鏁板憿錛熶笂闈㈣浜?jiǎn)锛尳E嬪簭鎺у埗鏉冨彲浠ュ湪瀵圭О寮忓崗紼嬩箣闂? 鑷敱鍦扮洿鎺ヤ紶閫掞紝瀹冧滑涔嬮棿鏃犳墍璋撹皝浠庡睘浜庤皝鐨勯棶棰橈紝閮藉浜庡悓涓涓眰綰э紝浣嗘槸搴旂敤紼嬪簭蹇呴』鏈変竴涓紑濮嬬偣錛屾墍浠ユ垜浠畾涔変竴涓富鍑芥暟錛岃瀹冪偣鐕冪▼搴忚繍琛岀殑瀵肩伀 綰褲傝櫧璇村悇涓崗紼嬮兘鏄鉤絳夌殑錛屼絾鍋氫負(fù)紼嬪簭榪愯鍘熷姩鍔涚殑涓誨嚱鏁頒粛鐒朵韓鏈夌壒孌婄殑鍦頒綅(榪欎釜涓栦笂鍝湁緇濆鐨勫鉤絳夛紒)錛屼負(fù)姝ゆ垜浠殑搴撲笓闂ㄧ敤浜?jiǎn)涓涓? coro.main鍙橀噺鏉ヤ繚瀛樹(shù)富鍑芥暟錛屽茍涓斿湪瀹冩墽琛屼箣鍓嶈灝嗗畠璁句負(fù)褰撳墠鍗忕▼(铏界劧涓婇潰鐨刴ain瀹為檯鍙槸涓涓櫘閫氬嚱鏁拌岄潪涓涓湡姝g殑鍗忕▼錛屼絾榪欏茍鏃犲お澶х殑 鍏崇郴錛屼互鍚庝富鍑芥暟涔熻縐頒負(fù)涓誨崗紼?銆傜ず渚嬭繍琛岀殑緇撴灉鏄細(xì)
銆銆
銆銆1: foo1 received value 0
銆銆1: foo2 received value 10
銆銆1: main received value 20
銆銆2: foo2 received value 30
銆銆2: foo1 received value 40
銆銆2: main received value 50
銆銆3: foo1 received value 60
銆銆3: main received value 70
銆銆
銆銆鍗忕▼鐨勬墽琛屽簭鍒楁槸錛歮ain->foo1->foo2->main->foo2->foo1->main->foo1->main銆?br />銆銆
銆 銆銆銆coro.transfer(k,val)鍑芥暟涓璳鏄皢瑕佹帴鏀剁▼搴忔帶鍒舵潈鐨勫崗紼嬶紝鑰寁al鏄紶閫掔粰k鐨勬暟鎹傚鏋滃綋鍓嶅崗紼嬩笉鏄富鍗忕▼錛? tansfer(k,val)灝辯畝鍗曞湴鍒╃敤coroutine.yield(k,val)灝嗗綋鍓嶅崗紼嬫寕璧峰茍浼犲洖涓ら」鏁版嵁錛屽嵆紼嬪簭鎺у埗鏉冪殑涓嬩竴绔欏拰浼犻掔粰瀹? 鐨勬暟鎹紱鍚﹀垯榪涘叆涓涓帶鍒舵潈鍒嗘淳(dispatch)寰幆錛岃寰幆(閲?鍚姩(resume)k鍗忕▼錛岀瓑寰呭畠鎵ц鍒版寕璧?suspend)錛屽茍鏍規(guī)嵁姝ゆ椂鍗? 紼嬩紶鍥炵殑鏁版嵁鏉ュ喅瀹氫笅涓涓(閲?鍚姩鐨勫崗紼嬨備粠搴旂敤紺轟緥鏉ョ湅錛屽崗紼嬩笌鍗忕▼涔嬮棿浼間箮鏄敤transfer鐩存帴浼犻掓帶鍒舵潈鐨勶紝浣嗗疄闄呬笂榪欎釜浼犻掕繕鏄氳繃浜?jiǎn)涓? 鍗忕▼銆傛瘡涓涓湪涓誨崗紼嬮噷琚皟鐢?姣旇緝coro.current鍜宑oro.main鏄惁鐩稿悓鍗沖彲鍒ゆ柇鍑?鐨則ransfer閮界浉褰撲簬涓涓崗紼嬬鐞嗗櫒錛屽畠涓? 鏂湴(閲?鍚姩涓涓崗紼嬶紝灝嗘帶鍒舵潈浜ゅ嚭鍘伙紝鐒跺悗絳夐偅涓崗紼嬫寕璧鋒椂鍙堝皢鎺у埗鏉冩敹鍥烇紝鐒跺悗鍐?閲?鍚姩涓嬩竴涓崗紼?..錛岃繖涓姩浣滀笉浼?xì)鍋滄锛岄櫎闈?lt; 1>灝?閲?鍚姩鐨勫崗紼嬫槸涓誨崗紼嬶紱<2>鏌愪釜鍗忕▼娌℃湁鎻愪緵鎺у埗鏉冪殑涓嬩竴涓洰鐨勫湴銆傚緢鏄劇劧錛屾瘡涓杞垎媧懼驚鐜紑濮嬫椂閮界敱涓誨崗紼嬫妸鎻℃帶鍒舵潈錛? 鍦ㄥ驚鐜繃紼嬩腑濡傛灉鎺у埗鏉冪殑涓嬩竴绔欏張鏄富鍗忕▼鐨勮瘽灝辨剰鍛崇潃榪欎釜褰撳垵鎶婃帶鍒舵潈浜ゅ嚭鍘葷殑涓誨崗紼媡ransfer鎿嶄綔搴旇緇撴潫浜?jiǎn)锛屾墍浠ュ嚱鏁扮洿鎺ヨ繑鍥瀡al浠庤岀粨鏉? 榪欒疆寰幆銆傚浜庢儏鍐?lt;2>錛屽洜涓篶oro.create(f)鍒涘緩鐨勫崗紼嬬殑浣撳嚱鏁?body function)瀹為檯鏄痜unction(val) return nil,f(val) end錛屾墍浠ュ綋鍑芥暟f鐨勬渶鍚庝竴鏉℃寚浠や笉鏄痶ransfer鏃訛紝榪欎釜鍗忕▼緇堝皢鎵ц瀹屾瘯騫舵妸nil鍜屽嚱鏁癴鐨勮繑鍥炲間竴璧瘋繑鍥炪傚鏋渒鏄繖鏍風(fēng)殑鍗忕▼錛? transfer鎵ц瀹宬,val = k(val)璇彞鍚巏鍊煎氨鎴愪簡(jiǎn)nil錛岃繖琚涓轟竴涓敊璇紝鍥犱負(fù)紼嬪簭姝ゆ椂娌℃硶紜畾涓嬩竴涓簲璇?閲?鍚姩鐨勫崗紼嬪埌搴曟槸璋併傛墍浠ュ湪瀵圭О寮忔ā鍨嬩笅錛屾瘡涓涓崗紼?褰? 鐒朵富鍗忕▼鍑哄)鏈鍚庨兘蹇呴』鏄懼紡鍦板皢鎺у埗鏉冧紶閫掔粰鍏跺畠鐨勫崗紼嬨傛牴鎹互涓婂垎鏋愶紝搴旂敤紺轟緥鐨勬帶鍒舵潈鐨勫垎媧懼簲涓猴細(xì)
銆銆
銆銆絎竴杞垎媧? main->foo1->main->foo2->main->main(緇撴潫)
銆銆絎簩杞垎媧? main->foo2->main->foo1->main->main(緇撴潫)
銆銆絎笁杞垎媧? main->foo1->main->main(緇撴潫)
銆銆
銆 銆銆銆鐢變簬鍙互鐩存帴鎸囧畾鎺у埗鏉冧紶閫掔殑鐩爣錛屽縐板紡鍗忕▼鏈哄埗鎷ユ湁鏋佸ぇ鐨勮嚜鐢憋紝浣嗗緱鍒拌繖縐嶈嚜鐢辯殑浠d環(huán)鍗存槸鐗虹壊紼嬪簭緇撴瀯銆傚鏋滅▼搴忕◢寰鏉備竴鐐癸紝閭d箞鍗充嬌鏄潪甯? 鏈夌粡楠岀殑紼嬪簭鍛樹(shù)篃寰堥毦瀵圭▼搴忔祦紼嬫湁鍏ㄩ潰鑰屾竻鏅扮殑鎶婃彙銆傝繖闈炲父綾諱技goto璇彞錛屽畠鑳借紼嬪簭璺寵漿鍒頒換浣曟兂鍘葷殑鍦版柟錛屼絾浜轟滑鍗村緢闅劇悊瑙e厖鏂ョ潃goto鐨勭▼搴忋? 闈炲縐板紡鍗忕▼鍏鋒湁鑹ソ鐨勫眰嬈″寲緇撴瀯鍏崇郴錛?閲?鍚姩榪欎簺鍗忕▼涓庤皟鐢ㄤ竴涓嚱鏁伴潪甯哥被浼鹼細(xì)琚?閲?鍚姩鐨勫崗紼嬪緱鍒版帶鍒舵潈寮濮嬫墽琛岋紝鐒跺悗鎸傝搗(鎴栫粨鏉?騫跺皢鎺у埗 鏉冭繑鍥炵粰鍗忕▼璋冪敤鑰咃紝榪欎笌璁$畻鏈哄厛鍝蹭滑鍊″鐨勭粨鏋勫寲緙栫▼椋庢牸瀹屽叏涓鑷淬?br />銆銆
銆銆銆銆緇間笂鎵榪幫紝Lua鎻愪緵鐨勯潪瀵圭О寮忓崗紼嬩笉浣嗗叿鏈変笌瀵圭О寮忓崗紼嬩竴鏍峰己澶х殑鑳藉姏錛岃屼笖榪樿兘閬垮厤紼嬪簭鍛樻互鐢ㄦ満鍒跺啓鍑虹粨鏋勬販涔辯殑紼嬪簭銆?img src ="http://m.shnenglu.com/swo2006/aggbug/15781.html" width = "1" height = "1" />

swo 2006-11-29 14:30 鍙戣〃璇勮
]]>
fuction(lua)http://m.shnenglu.com/swo2006/articles/15732.htmlswoswoTue, 28 Nov 2006 06:43:00 GMThttp://m.shnenglu.com/swo2006/articles/15732.htmlhttp://m.shnenglu.com/swo2006/comments/15732.htmlhttp://m.shnenglu.com/swo2006/articles/15732.html#Feedback0http://m.shnenglu.com/swo2006/comments/commentRss/15732.htmlhttp://m.shnenglu.com/swo2006/services/trackbacks/15732.htmlLua涓殑鍑芥暟鏄竴闃剁被鍨嬪?first-class value)錛屽畾涔夊嚱鏁板氨璞″垱寤烘櫘閫氱被鍨嬪間竴鏍?鍙笉榪囧嚱鏁扮被鍨?/font> 鍊肩殑鏁版嵁涓昏鏄竴鏉℃潯鎸囦護(hù)鑰屽凡)錛屾墍浠ュ湪鍑芥暟浣撲腑浠嶇劧鍙互瀹氫箟鍑芥暟銆傚亣璁懼嚱鏁癴2瀹氫箟鍦ㄥ嚱鏁癴1涓紝閭d箞灝辯О f2涓篺1鐨勫唴宓?inner)鍑芥暟錛宖1涓篺2鐨勫鍖?enclosing)鍑芥暟錛屽鍖呭拰鍐呭祵閮藉叿鏈変紶閫掓э紝鍗砯2鐨勫唴宓屽繀鐒舵槸 f1鐨勫唴宓岋紝鑰宖1鐨勫鍖呬篃涓瀹氭槸f2鐨勫鍖呫傚唴宓屽嚱鏁板彲浠ヨ闂鍖呭嚱鏁板凡緇忓垱寤虹殑鎵鏈夊眬閮ㄥ彉閲忥紝榪欑鐗規(guī)т究鏄?/font> 鎵璋撶殑璇嶆硶瀹氱晫(lexical scoping)錛岃岃繖浜涘眬閮ㄥ彉閲忓垯縐頒負(fù)璇ュ唴宓屽嚱鏁扮殑澶栭儴灞閮ㄥ彉閲?external local variable)鎴栬卽pvalue(榪欎釜璇嶅灝戜細(xì)璁╀漢浜х敓璇В錛屽洜涓簎pvalue瀹為檯鎸囩殑鏄彉閲忚屼笉鏄?銆傝瘯鐪嬪涓嬩唬 鐮侊細(xì)

function f1(n)
聽(tīng)聽(tīng) -- 鍑芥暟鍙傛暟涔熸槸灞閮ㄥ彉閲?/font>

聽(tīng)聽(tīng) local function f2()
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) print(n) -- 寮曠敤澶栧寘鍑芥暟鐨勫眬閮ㄥ彉閲?/font>
聽(tīng)聽(tīng) end
聽(tīng)聽(tīng) return f2
end

g1 = f1(1979)
g1() -- 鎵撳嵃鍑?979
g2 = f1(500)
g2() -- 鎵撳嵃鍑?00

褰撴墽琛屽畬g1 = f1(1979)鍚庯紝灞閮ㄥ彉閲弉鐨勭敓鍛芥湰璇ョ粨鏉燂紝浣嗗洜涓哄畠宸茬粡鎴愪簡(jiǎn)鍐呭祵鍑芥暟f2(瀹冨張琚祴緇欎簡(jiǎn)鍙橀噺 g1)鐨剈pvalue錛屾墍浠ュ畠浠嶇劧鑳戒互鏌愮褰㈠紡緇х畫(huà)鈥滃瓨?gòu)z燴濅笅鏉ワ紝浠庤屼護(hù)g1()鎵撳嵃鍑烘紜殑鍊箋?/font>

聽(tīng)聽(tīng)聽(tīng) 鍙負(fù)浠涔坓2涓巊1鐨勫嚱鏁頒綋涓鏍?閮芥槸f1鐨勫唴宓屽嚱鏁癴2鐨勫嚱鏁頒綋)錛屼絾鎵撳嵃鍊間笉鍚岋紵榪欏氨娑夊強(qiáng)鍒頒竴涓浉褰撻噸瑕?/font> 鐨勬蹇碘斺旈棴鍖?closure)銆備簨瀹炰笂錛孡ua緙栬瘧涓涓嚱鏁版椂錛屼細(xì)涓哄畠鐢熸垚涓涓師鍨?prototype)錛屽叾涓寘鍚簡(jiǎn) 鍑芥暟浣撳搴旂殑铏氭嫙鏈烘寚浠ゃ佸嚱鏁扮敤鍒扮殑甯擱噺鍊?鏁幫紝鏂囨湰瀛楃涓茬瓑絳?鍜屼竴浜涜皟璇曚俊鎭傚湪榪愯鏃訛紝姣忓綋Lua鎵ц 涓涓艦濡俧unction...end 榪欐牱鐨勮〃杈懼紡鏃訛紝瀹冨氨浼?xì)鍒涘晦Z竴涓柊鐨勬暟鎹璞★紝鍏朵腑鍖呭惈浜?jiǎn)鐩稿簲鍑芥暟鍘熷瀷鐨勫紩鐢?/font> 銆佺幆澧?environment錛岀敤鏉ユ煡鎵懼叏灞鍙橀噺鐨勮〃)鐨勫紩鐢ㄤ互鍙?qiáng)涓涓敱鎵鏈塽pvalue寮曠敤緇勬垚鐨勬暟緇勶紝鑰岃繖涓暟鎹?/font> 瀵硅薄灝辯О涓洪棴鍖呫傜敱姝ゅ彲瑙侊紝鍑芥暟鏄紪璇戞湡姒傚康錛屾槸闈?rùn)鎬佺殑錛岃岄棴鍖呮槸榪愯鏈熸蹇碉紝鏄姩鎬佺殑銆俫1鍜実2鐨勫間弗鏍?/font> 鏉ヨ涓嶆槸鍑芥暟鑰屾槸闂寘錛屽茍涓旀槸涓や釜涓嶇浉鍚岀殑闂寘錛岃屾瘡涓棴鍖呭彲浠ヤ繚鏈夎嚜宸辯殑upvalue鍊鹼紝鎵浠1鍜実2鎵撳嵃鍑?/font> 鐨勭粨鏋滃綋鐒跺氨涓嶄竴鏍蜂簡(jiǎn)銆傝櫧鐒墮棴鍖呭拰鍑芥暟鏄湰璐ㄤ笉鍚岀殑姒傚康錛屼絾涓轟簡(jiǎn)鏂逛究錛屼笖鍦ㄤ笉寮曡搗娣鋒穯鐨勬儏鍐典笅錛屾垜浠瀹?/font> 浠笉鍋氬尯鍒嗐?/font>

聽(tīng)聽(tīng)聽(tīng) 浣跨敤upvalue寰堟柟渚匡紝浣嗗畠浠殑璇箟涔熷緢寰錛岄渶瑕佸紩璧鋒敞鎰忋傛瘮濡傚皢f1鍑芥暟鏀規(guī)垚錛?/font>

function f1(n)
聽(tīng)聽(tīng) local function f2()
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) print(n)
聽(tīng)聽(tīng) end
聽(tīng)聽(tīng) n = n + 10
聽(tīng)聽(tīng) return f2
end

g1 = f1(1979)
g1() -- 鎵撳嵃鍑?989

鍐呭祵鍑芥暟瀹氫箟鍦╪ = n + 10榪欐潯璇彞涔嬪墠錛屽彲涓轟粈涔坓1()鎵撳嵃鍑虹殑鍗存槸1989錛焨pvalue瀹為檯鏄眬閮ㄥ彉閲忥紝鑰?/font> 灞閮ㄥ彉閲忔槸淇濆瓨鍦ㄥ嚱鏁板爢鏍堟鏋朵笂(stack frame)鐨勶紝鎵浠ュ彧瑕乽pvalue榪樻病鏈夌寮鑷繁鐨勪綔鐢ㄥ煙錛屽畠?yōu)兏鐩?/font> 鐢熷瓨鍦ㄥ嚱鏁板爢鏍堜笂銆傝繖縐嶆儏鍐典笅錛岄棴鍖呭皢閫氳繃鎸囧悜鍫嗘爤涓婄殑upvalue鐨勫紩鐢ㄦ潵璁塊棶瀹冧滑錛屼竴鏃pvalue鍗沖皢紱誨紑 鑷繁鐨勪綔鐢ㄥ煙(榪欎篃鎰忓懗鐫瀹冮┈涓婅浠庡爢鏍堜腑娑堝け)錛岄棴鍖呭氨浼?xì)湄?fù)瀹冨垎閰嶇┖闂村茍淇濆瓨褰撳墠鐨勫鹼紝浠ュ悗渚垮彲閫氳繃鎸囧悜 鏂板垎閰嶇┖闂寸殑寮曠敤鏉ヨ闂upvalue銆傚綋鎵ц鍒癴1(1979)鐨刵 = n + 10鏃訛紝闂寘宸茬粡鍒涘緩浜?jiǎn)锛屼絾鏄痭騫舵病鏈夌 寮浣滅敤鍩燂紝鎵浠ラ棴鍖呬粛鐒跺紩鐢ㄥ爢鏍堜笂鐨刵錛屽綋return f2瀹屾垚鏃訛紝n鍗沖皢緇撴潫鐢熷懡錛屾鏃墮棴鍖呬究灝唍(宸茬粡鏄?989 浜?澶嶅埗鍒拌嚜宸辯鐞嗙殑絀洪棿涓互渚垮皢鏉ヨ闂傚紕娓呮浜?jiǎn)鍐呴儴鐨効U樺瘑鍚庯紝榪愯緇撴灉灝變笉闅捐В閲婁簡(jiǎn)銆?/font>

聽(tīng)聽(tīng)聽(tīng) upvalue榪樺彲浠ヤ負(fù)闂寘涔嬮棿鎻愪緵涓縐嶆暟鎹叡浜殑鏈哄埗銆傝瘯鐪嬩笅渚嬶細(xì)

function Create(n)
聽(tīng)聽(tīng) local function foo1()
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) print(n)
聽(tīng)聽(tīng) end

聽(tīng)聽(tīng) local function foo2()
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) n = n + 10
聽(tīng)聽(tīng) end

聽(tīng)聽(tīng) 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ì)鑱?/font> 鏄庡湴鍙敓鎴愪竴涓嫹璐濓紝鐒跺悗璁╄繖涓や釜闂寘鍏變韓璇ユ嫹璐濓紝榪欐牱浠諱竴涓棴鍖呭璇pvalue榪涜淇敼閮戒細(xì)琚彟涓涓帰鐭?/font> 銆備笂榪頒緥瀛愬緢娓呮鍦拌鏄庝簡(jiǎn)榪欑偣錛氭瘡嬈¤皟鐢╢2閮藉皢upvalue鐨勫煎鍔犱簡(jiǎn)10錛岄殢鍚巉1灝嗘洿鏂板悗鐨勫兼墦鍗板嚭鏉ャ?/font> upvalue鐨勮繖縐嶈涔夊緢鏈変環(huán)鍊鹼紝瀹冧嬌寰楅棴鍖呬箣闂村彲浠ヤ笉渚濊禆鍏ㄥ眬鍙橀噺榪涜閫氳錛屼粠鑰屼嬌浠g爜鐨勫彲闈犳уぇ澶ф彁楂樸?/font>

聽(tīng)聽(tīng)聽(tīng) 闂寘鍦ㄥ垱寤轟箣鏃跺叾upvalue灝卞凡緇忎笉鍦ㄥ爢鏍堜笂鐨勬儏鍐典篃鏈夊彲鑳藉彂鐢燂紝榪欐槸鍥犱負(fù)鍐呭祵鍑芥暟鍙互寮曠敤鏇村灞傚鍖呭嚱鏁?/font> 鐨勫眬閮ㄥ彉閲忥細(xì)

function Test(n)
聽(tīng)聽(tīng) local function foo()
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) local function inner1()
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) print(n)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) end
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) local function inner2()
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) n = n + 10
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) end
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) return inner1,inner2
聽(tīng)聽(tīng) end
聽(tīng)聽(tīng) return foo
end

t = Test(1979)
f1,f2 = t()
f1()聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) -- 鎵撳嵃1979
f2()
f1()聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) -- 鎵撳嵃1989
g1,g2 = t()
g1()聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) -- 鎵撳嵃1989
g2()
g1()聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) -- 鎵撳嵃1999
f1()聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) -- 鎵撳嵃1999

鎵ц瀹宼 = Test(1979)鍚庯紝Test鐨勫眬閮ㄥ彉閲弉灝扁滄鈥濅簡(jiǎn)錛屾墍浠ュ綋f1,f2榪欎袱涓棴鍖呰鍒涘緩鏃跺爢鏍堜笂鏍規(guī)湰鎵句笉鍒?/font> n鐨勮釜褰憋紝榪欏彨瀹冧滑濡備綍鍙栧緱n鐨勫煎憿錛熷懙鍛碉紝涓嶈蹇樹(shù)簡(jiǎn)Test鍑芥暟鐨刵涓嶄粎浠呮槸inner1鍜宨nner2鐨剈pvalue錛屽悓 鏃跺畠涔熸槸foo鐨剈pvalue銆倀 = Test(1979)涔嬪悗錛宼榪欎釜闂寘涓瀹氬凡緇忔妸n濡ュ杽淇濆瓨濂戒簡(jiǎn)錛屼箣鍚巉1銆乫2濡傛灉鍦?/font> 褰撳墠鍫嗘爤涓婃壘涓嶅埌n灝變細(xì)鑷姩鍒板畠浠殑澶栧寘闂寘(濮戜笖榪欎箞鍙?鐨剈pvalue寮曠敤鏁扮粍涓幓鎵撅紝騫舵妸鎵懼埌鐨勫紩鐢ㄥ兼嫹 璐濆埌鑷繁鐨剈pvalue寮曠敤鏁扮粍涓備粩緇嗚瀵熶笂榪頒唬鐮侊紝鍙互鍒ゅ畾g1鍜実2涓巉1鍜宖2鍏變韓鍚屼竴涓猽pvalue銆傝繖鏄負(fù) 浠涔堝憿錛熷叾瀹烇紝g1鍜実2涓巉1鍜宖2閮芥槸鍚屼竴涓棴鍖?t)鍒涘緩鐨勶紝鎵浠ュ畠浠紩鐢ㄧ殑upvalue(n)瀹為檯涔熸槸鍚屼竴涓彉閲?/font> 錛岃屽垰鎵嶆弿榪扮殑鎼滅儲(chǔ)鏈哄埗鍒欎繚璇佷簡(jiǎn)鏈鍚庡畠浠殑upvalue寮曠敤閮戒細(xì)鎸囧悜鍚屼竴涓湴鏂廣?/font>

聽(tīng)聽(tīng)聽(tīng) Lua灝嗗嚱鏁板仛涓哄熀鏈被鍨嬪煎茍鏀寔璇嶆硶瀹氱晫鐨勭壒鎬т嬌寰楄璦鍏鋒湁寮哄ぇ鐨勬娊璞¤兘鍔涖傝岄忓交璁よ瘑鍑芥暟銆侀棴鍖呭拰 upvalue灝嗗府鍔╃▼搴忓憳鍠勭敤榪欑鑳藉姏銆?/font>



swo 2006-11-28 14:43 鍙戣〃璇勮
]]>
日本WV一本一道久久香蕉| 精品国产一区二区三区久久久狼 | 国产成人综合久久精品尤物| 国产精品美女久久久久网| 久久精品中文字幕第23页| 亚洲中文字幕久久精品无码喷水 | 一本大道久久东京热无码AV| 一本一本久久A久久综合精品| 精品久久久久香蕉网| 久久国产香蕉一区精品| 婷婷伊人久久大香线蕉AV| 91久久精品无码一区二区毛片| 欧美久久一级内射wwwwww.| 久久久久亚洲AV无码专区体验| 狠狠色伊人久久精品综合网| 色狠狠久久AV五月综合| 亚洲一级Av无码毛片久久精品| 国产V亚洲V天堂无码久久久| 四虎影视久久久免费| 久久久国产精品福利免费| 亚洲精品白浆高清久久久久久| 精品一久久香蕉国产线看播放| 久久久久亚洲Av无码专| 久久精品无码一区二区WWW | 思思久久好好热精品国产| 精品久久久久中文字幕日本| 久久99精品国产麻豆宅宅| 久久精品中文字幕一区| 91麻精品国产91久久久久| 日本精品久久久久中文字幕| 久久人人爽人人爽人人片AV不 | 性欧美丰满熟妇XXXX性久久久| 久久久久久国产a免费观看不卡| 日本免费久久久久久久网站| 国产精品美女久久久m| 久久妇女高潮几次MBA| 精品国产日韩久久亚洲| 久久婷婷五月综合成人D啪| 亚洲美日韩Av中文字幕无码久久久妻妇 | 久久久久高潮毛片免费全部播放| 久久精品国产2020|