Lua 一个"local"可以容纳多少个变量?



我目前正在制作一个系统,因为我需要识别太多的东西为nil或{},我正在寻找这样的方式:

本地lorem ipsum,悲哀,坐下 = {}, {}, {}, {}

我会这么做,但是我能在1个地方识别多少个单词呢?

Lua有一个硬编码限制,可以在Lua源文件的lparser.c中找到:

/* maximum number of local variables per function (must be smaller
than 250, due to the bytecode format) */
#define MAXVARS     200

也就是说,无论使用了多少个local声明,任何函数最多只能声明200个局部变量。

这听起来和看起来都像是一个X/Y问题,所以我的主要问题是为什么

您最多可以使用200个变量,因为根据经验测试,Lua只允许您在任何代码段中使用200个局部变量。

(注意,从这里的注释判断,似乎限制实际上应该是256个局部变量。这是在Windows的Lua上测试的。显然,你的里程可能会有所警惕。)

是的,你可以声明并给他们一个值只用一个local声明。

local aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,ba,bb,bc,bd,be,bf,bg,bh,bi,bj,bk,bl,bm,bn,bo,bp,bq,br,bs,bt,bu,bv,bw,bx,by,bz,ca,cb,cc,cd,ce,cf,cg,ch,ci,cj,ck,cl,cm,cn,co,cp,cq,cr,cs,ct,cu,cv,cw,cx,cy,cz,da,db,dc,dd,de,df,dg,dh,di,dj,dk,dl,dm,dn,dp,dq,dr,ds,dt,du,dv,dw,dx,dy,dz,ea,eb,ec,ed,ee,ef,eg,eh,ei,ej,ek,el,em,en,eo,ep,eq,er,es,et,eu,ev,ew,ex,ey,ez,fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq,fr,fs,ft,fu,fv,fw,fx,fy,fz,ga,gb,gc,gd,ge,gf,gg,gh,gi,gj,gk,gl,gm,gn,go,gp,gq,gr,gs,gt,gu,gv,gw,gx,gy,gz,ha,hb,hc,hd,he,hf,hg,hh,hi,hj,hk,hl,hm,hn,ho,hp,hq,hr,hs=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200
print(aa)
print(ab)
print(ac)
print(ad)
print(ae)
print(af)
print(ag)
print(ah)
print(ai)
print(aj)
print(ak)
print(al)
print(am)
print(an)
print(ao)
print(ap)
print(aq)
print(ar)
print(as)
print(at)
print(au)
print(av)
print(aw)
print(ax)
print(ay)
print(az)
print(ba)
print(bb)
print(bc)
print(bd)
print(be)
print(bf)
print(bg)
print(bh)
print(bi)
print(bj)
print(bk)
print(bl)
print(bm)
print(bn)
print(bo)
print(bp)
print(bq)
print(br)
print(bs)
print(bt)
print(bu)
print(bv)
print(bw)
print(bx)
print(by)
print(bz)
print(ca)
print(cb)
print(cc)
print(cd)
print(ce)
print(cf)
print(cg)
print(ch)
print(ci)
print(cj)
print(ck)
print(cl)
print(cm)
print(cn)
print(co)
print(cp)
print(cq)
print(cr)
print(cs)
print(ct)
print(cu)
print(cv)
print(cw)
print(cx)
print(cy)
print(cz)
print(da)
print(db)
print(dc)
print(dd)
print(de)
print(df)
print(dg)
print(dh)
print(di)
print(dj)
print(dk)
print(dl)
print(dm)
print(dn)
print(dp)
print(dq)
print(dr)
print(ds)
print(dt)
print(du)
print(dv)
print(dw)
print(dx)
print(dy)
print(dz)
print(ea)
print(eb)
print(ec)
print(ed)
print(ee)
print(ef)
print(eg)
print(eh)
print(ei)
print(ej)
print(ek)
print(el)
print(em)
print(en)
print(eo)
print(ep)
print(eq)
print(er)
print(es)
print(et)
print(eu)
print(ev)
print(ew)
print(ex)
print(ey)
print(ez)
print(fa)
print(fb)
print(fc)
print(fd)
print(fe)
print(ff)
print(fg)
print(fh)
print(fi)
print(fj)
print(fk)
print(fl)
print(fm)
print(fn)
print(fo)
print(fp)
print(fq)
print(fr)
print(fs)
print(ft)
print(fu)
print(fv)
print(fw)
print(fx)
print(fy)
print(fz)
print(ga)
print(gb)
print(gc)
print(gd)
print(ge)
print(gf)
print(gg)
print(gh)
print(gi)
print(gj)
print(gk)
print(gl)
print(gm)
print(gn)
print(go)
print(gp)
print(gq)
print(gr)
print(gs)
print(gt)
print(gu)
print(gv)
print(gw)
print(gx)
print(gy)
print(gz)
print(ha)
print(hb)
print(hc)
print(hd)
print(he)
print(hf)
print(hg)
print(hh)
print(hi)
print(hj)
print(hk)
print(hl)
print(hm)
print(hn)
print(ho)
print(hp)
print(hq)
print(hr)
print(hs)

输出从1到200的所有数字。

添加1个变量,至少windows的Lua会给出这个错误:

C:Program Files (x86)Lua5.1 Lua .exe: test. exe。Lua:1: main函数有200多个局部变量

最新更新