Modul:Homokozó/Pepo41/UnpackSelectedArgs

Homokozó/Pepo41/UnpackSelectedArgs[mi ez?] • [dokumentáció: mutat, szerkeszt] • [tesztek: létrehozás]

local function main()

    function table.pack(...)
	return { n = select("#", ...), ... } -- létrehoz egy új táblát a varargs elemeivel 
				     -- és előtte egy n mezővel , a tábla hossza így n+1
	end

-- turns a frame object into a table
 
 	local frameargs = {}
 	frameargs[1]="Mondottam ember küzdj" -- segedtabl[1] 
 	frameargs["eltolás"] = "balra"       -- segedtabl[2]
 	frameargs[2]="és bízva bízzál"
 	frameargs["szin"] = "kék"
 	frameargs[3]= "Oszt jónapot!"        -- segedtabl[5]
	-- a fenti kód megfelel a frame objektum kezelése alábbi kódjának
	
	
 	function unpackSelectedFrame(frame, ...) 
 -- pl. frameargs, "szin","eltolás",3 
 		local selectedargs = {} -- ide gyűjtjük a frameargsból kiválasztandó argumentumokat: "szin","eltolás",3 
 		selectedargs=table.pack(...) -- első eleme az ilyen argumentumok száma
 									-- 3, "szin","eltolás",3
   		local segedtabl =  {} -- ezek lesznek a frameargs elemei egész indexekkel
    	local indextabl =  {} -- ezek lesznek az indexei
    	local i= 0
   		for k, v in pairs(frame) do  -- frame majd frameargs ílesz 
   			i=i+1
       		segedtabl[i] = v -- gyűlnek a frameargs elemei egész indexekkel
       		indextabl[i] = k -- gyűlnek a frameargs indexei 
       	end	
   		n=i
   		
		--for i=1,n do   		print (segedtabl[i]) end -- 1="Mondottam ember küzdj",2="és bízva bízzál"
														--3="Oszt jónapot!",4="kék",5="balra"

		--for i=1,n do   		print (indextabl[i]) end -- 1,2,3,"szin","eltolás"
	   	local outtabl = {}  -- ezt a táblát fogjuk unpackkal kiadni
    	for i=1, selectedargs.n do -- ezek a kiválasztottak :"szín","eltolás",3
    							-- melyik i felel meg ezeknek az indextáblában? (4,5,3)
    				for j=1, n do 
    				   if selectedargs[i] == indextabl[j] then outtabl[i]=segedtabl[j] end
    				       --1,2,3,"szin","eltolás"=="szín","eltolás",3
    				   --print(i,j,selectedargs[i],indextabl[j])
    				end --j ciklus
    				--print(outtabl[i])
    	end	-- i ciklus		       
		--print (unpack(outtabl))
		return unpack(outtabl)
 end -- unpackSelectedFrame		
		
    

--print(unpackSelectedFrame(frameargs,4,5,3,1,2 )) -- szín, eltolás, "oszt.." "Mondottam.." "és bízva.."
  print(unpackSelectedFrame(frameargs,"szin","eltolás",3))
  print(unpackSelectedFrame(frameargs,1,"eltolás","szin",3))
  print(unpackSelectedFrame(frameargs,2,1,"szin","eltolás",3)) 
end
main()