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

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

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)鍚庯紝灞閮ㄥ彉閲弉鐨勭敓鍛芥湰璇ョ粨鏉燂紝浣嗗洜涓哄畠宸茬粡鎴愪簡鍐呭祵鍑芥暟f2(瀹冨張琚祴緇欎簡鍙橀噺 g1)鐨剈pvalue錛屾墍浠ュ畠浠嶇劧鑳戒互鏌愮褰㈠紡緇х畫鈥滃瓨媧燴濅笅鏉ワ紝浠庤屼護g1()鎵撳嵃鍑烘紜殑鍊箋?/font>

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

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

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

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

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璋冪敤鍚庯紝闂寘浼氭妸鍫嗘爤涓妌鐨勫煎鍒跺嚭鏉ワ紝閭d箞鏄惁f1鍜宖2 灝卞垎鍒嫢鏈変竴涓猲鐨勬嫹璐濆憿錛熷叾瀹炰笉鐒訛紝褰揕ua鍙戠幇涓や釜闂寘鐨剈pvalue鎸囧悜鐨勬槸褰撳墠鍫嗘爤涓婄殑鐩稿悓鍙橀噺鏃訛紝浼氳仾 鏄庡湴鍙敓鎴愪竴涓嫹璐濓紝鐒跺悗璁╄繖涓や釜闂寘鍏變韓璇ユ嫹璐濓紝榪欐牱浠諱竴涓棴鍖呭璇pvalue榪涜淇敼閮戒細琚彟涓涓帰鐭?/font> 銆備笂榪頒緥瀛愬緢娓呮鍦拌鏄庝簡榪欑偣錛氭瘡嬈¤皟鐢╢2閮藉皢upvalue鐨勫煎鍔犱簡10錛岄殢鍚巉1灝嗘洿鏂板悗鐨勫兼墦鍗板嚭鏉ャ?/font> upvalue鐨勮繖縐嶈涔夊緢鏈変環(huán)鍊鹼紝瀹冧嬌寰楅棴鍖呬箣闂村彲浠ヤ笉渚濊禆鍏ㄥ眬鍙橀噺榪涜閫氳錛屼粠鑰屼嬌浠g爜鐨勫彲闈犳уぇ澶ф彁楂樸?/font>

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

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

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



swo 2006-11-28 14:43 鍙戣〃璇勮
]]>
久久久久久久久久久久中文字幕 | 亚洲午夜久久久精品影院| 久久久久亚洲精品天堂久久久久久 | 94久久国产乱子伦精品免费| 亚洲国产成人久久综合碰碰动漫3d| 国产午夜福利精品久久| 久久99精品久久久久久噜噜| 伊人久久大香线蕉综合网站| 久久婷婷国产综合精品| 亚洲国产精品久久久久久| 一级a性色生活片久久无| 日韩精品久久无码人妻中文字幕| 久久综合中文字幕| 久久久久久无码国产精品中文字幕 | 99久久无码一区人妻| 久久人人爽人人人人爽AV| 精品久久久久久久| 久久婷婷色香五月综合激情| 91亚洲国产成人久久精品| 亚洲欧美成人综合久久久| 久久无码国产| 国产香蕉97碰碰久久人人| 久久www免费人成看片| 国产成人久久精品麻豆一区| 久久综合狠狠综合久久| 久久久久久久综合综合狠狠| 国内精品久久人妻互换| 人妻无码αv中文字幕久久琪琪布 人妻无码精品久久亚瑟影视 | 国产成人无码精品久久久久免费| 久久天堂AV综合合色蜜桃网| 免费久久人人爽人人爽av| 免费一级欧美大片久久网| 国产一区二区精品久久凹凸| 久久福利青草精品资源站免费| 欧洲人妻丰满av无码久久不卡| 伊人色综合久久天天人守人婷| 精品久久综合1区2区3区激情| 亚洲一本综合久久| 国产精品日韩欧美久久综合| 91麻豆精品国产91久久久久久 | 中文字幕亚洲综合久久菠萝蜜 |