Lua pure funciones aplicadas en AMS

Puedes encontrar todo tipo de tutoriales y manuales referentes a AMS
A peticion de varios usuarios voy a ir editando aqui algunos ejemplos y sinónimos de funciones en lua pure con funciones de ams , para empezar hay que tener claro que las funciones de lua pure son 100000000000000 mejor que las de AMS ya que estas son una conversión de ellas , por lo tanto ganamos en rapidez de ejecución entre otras cosas , si quereis ayuda de verdad sobre el tema lo mejor es que busqueis informacion en el manual del LUA ,vereis que no es tan dificil si practicais algunas funciones Funciones Basicas lua .
Para emepzar en ams no se habla del operador de longitud # este operador nos sirve tanto para tablas como para strings , podría se un substituto de las funciones Table.Count y String.Length , por ejemplo en tablas seria su uso así , saber el numero de indices de una tabla siempre que esta sea numérico osea :
t={}
t[1]="a";
t[2]="b"
t[3]="c"
o
t={"a","b","c"};
En este caso si utilizamos el operador seria asi:
Debug.ShowWindow(true);
Debug.Print(#t);-- esto seria = que Table.Count(t) , y nos daría resultado 3.
En el caso de tablas con otro indice no numérico no funciona y da 0 para eso usaremos table.count, por ejmplo:
t={A="a",B="b",C="c"};
Debug.ShowWindow(true);
Debug.Print(#t);-- Esto da resultado 0 por no ser una tabla con indice numerico.
Operador utilizado en strings , seria lo mismo que String.Length, por ejemplo:
str="Hola Mundo";
Debug.ShowWindow(true)
Debug.Print(#str);-- el resultado seria 10 = que String.Length(str);
despues existen funciones como tonumber() o tostring() , creo que son las que mas eh utilizado , como su propio nombre dice son conversores a numero y a string por ejemplo:
valor = "1"; -- esto es un string asi que no se podria operar con el como numero, realizamos conversión y ya esta.

resultado = tonumber(valor) + 2 ;
Debug.ShowWindow(true);
Debug.Print(resultado);-- esto seria 3 , si no se utilizara el conversor daria error de operacion ," no se puede sumar 2 a un string"
En el caso de tostring() nos convierte cualquier valor ( convertible) a string , por ejemplo para poder imprimirlo en un dialog , en este caso un boleano...
check=CheckBox.GetChecked("CheckBox1"); -- esto da como resultado un booleano true si esta check y false en caso contrario.
--Si lo queremos utilizar como string realizamos conversion.
Dialog.Message("Is checked?",tostring(check));-- si no utilizamos tostring los boolenaos no se pueden imprimir en un dialog.
Manejo de strings:

Por ejemplo la equivalente a String.Replace de ams seria string.gsub por supuesto podemos utilizarla = en lo que argumentos se refiere pero en la de lua pure se pueden usar patrones de búsqueda y funciones de reemplazo , esto es un tema mas extenso que deberíais leer en el manual de lua , pero podéis utilizarla como en ams y ya con ello ganáis velocidad , seguro.

Tambien hay otras que realizan capturas de string mediante patrones como string.match o string.gmatch merece la pena entenderlas un poco para su uso , son muy utiles.

string.lower() , string.upper() son igual que en ams

manejo de tablas:

Hay algunas funciones de manejo de tablas , son iguales en ams como table.insert() ,table.concat(),table.remove(),table.sort()

Funciones del sistema:

os.date() nos retorna un string con el datetime actual en tu sistema , si utilizamos argumentos podemos dar formatos . por ejemplo si queremos una tabla del date time seria con "*t" como argumento , esto nos retrona una tabla con extensiones :year (cuatro dígitos), month (1--12), day (1--31), hour (0--23), min (0--59), sec (0--61), wday (día de la semana, el domingo es 1), yday (día dentro del año), e isdst (booleano, verdadero si es horario de verano).

Ejemplo:
tdate = os.date("*t");
Dialog.Message("La fecha actual es:",
"Año : ".. tdate.year..
"\r\nMes : "..tdate.month..
"\r\nDia : ".. tdate.day..
"\r\nHora : "..tdate.hour..
"\r\nMinutos : "..tdate.min..
"\r\nSegundos : "..tdate.sec..
"\r\nDia de la semana : "..tdate.wday..
"\r\nDia en el año : "..tdate.yday..
"\r\nHorario de verano : "..tostring(tdate.isdst));
con esta funcion tenemos un todo en uno con System.GetDate,System.GetTime y otras.

En cuestión de tiempos y fechas podemos usar os.difftime(t1,t2) donde los argumentos son dos tablas de fechas (como las de os.date()) y nos retorna la diferencia.

os.time(t1): Devuelve el tiempo actual cuando se llama sin argumentos, o un tiempo representando la fecha y hora especificadas en la tabla dada. Ésta debe tener los campos year, month y day, y puede tener los campos hour, min, sec e isdst (para una descripción de esos campos,El valor retornado es un número, cuyo significado depende del sistema. En POSIX, Windows y algunos otros sistemas este número cuenta el número de segundos desde alguna fecha inicial dada (la "época"). En otros sistemas el significado no está especificado, y el número retornado por time puede ser usado sólo como argumento de las funciones date y difftime.(sacado de la ayuda lua 5.1)

Tambien tenemos os.rename(nombre_fichero) que seria un File.Rename, os.remove(nombre_fichero) seria un File.Delete , os.execute seria un Shell.Execute hay mas utilidades del sistema que podéis consultar en la ayuda de lua.

Bueno alguna función mas aplicable..., por ejemplo esta pcall, nos permite verificar una función y evitar que sus errores se propaguen , yo la utilizo cuando hay alguna función que no se si dara error o no, según argumentos variables que no puedo controlar y si lo quisiera hacer tendría que hacer muchos filtros o resulta complicado controlarlo.
pcall admite como primer argumento la función y seguido de los argumentos que precise esta, ejem: pcall(function,arg1,arg2,..) , pcall devuelve como primer valor un booleano según haya errores o no , si no los hay retorna true y como siguientes los retornos de la función en si , si hay error retorna false seguido de un mensaje de error, un ejemplo de true:
function sume(a,b)
local c;
c=a+b
return c;
end

a,b = pcall(sume,5,3)
Debug.ShowWindow(true)
Debug.Print(tostring(a).." | "..b)
-- debug imprime : true | 8 no hay errores
en caso de error...
function sume(a,b)
local c;
c=a+b
return c;
end

a,b = pcall(sume,"s",3)
Debug.ShowWindow(true)
Debug.Print(tostring(a).." | "..b)
-- debug imprime : false | [string "local this="xButton1";--@@Page1 -> xButton1..."]:4: attempt to perform arithmetic on local 'a' (a string value)-- como mensaje de error.
Visto esto lo practico es filtrar solo el primer retorno de pcall (booleano) y ya tenemos controlada la función en caso de errores inesperados.

Otra función sencilla de entender seria type() esta solo nos comprueba un argumento , sus retornos pueden ser, tipo :"number", "string", "boolean, "table", "function", "thread" y "userdata" o "nil" (string no valor nil) si no encuentra el tipo o hay error.ejem:
a={};
Debug.ShowWindow(true)
Debug.Print(type(a));--imprime string "table"
a=1;
Debug.ShowWindow(true)
Debug.Print(type(a));--imprime string "number"
a="hola";
Debug.ShowWindow(true)
Debug.Print(type(a));--imprime string "string"
a=d
Dialog.Message("Notice", type(a), MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);--imprime string "nil"
Esta función la uso mucho para filtrar valores de typo en las funciones:
function sume(a,b)
local c;
	if type(a) == "number" and type(b) == "number" then
		c= a + b;
		return c;
	else
		return "Algunos de los valores no es un número";
	end
end


Editando...
rafaxplayer escribió:
(#t) = Table.Count(t)


Information of great beauty Thank you very much

We need more of the shortcuts from these examples :num1: :num1: :num1:
;) ;) ;)

but :
rafaxplayer escribió:
Debug.Show(true);
the true code is :
Debug.ShowWindow(true);
[/color][/b]
abood1987 escribió:
rafaxplayer escribió:
(#t) = Table.Count(t)


Information of great beauty Thank you very much

We need more of the shortcuts from these examples :num1: :num1: :num1:
;) ;) ;)

but :
rafaxplayer escribió:
Debug.Show(true);
the true code is :
Debug.ShowWindow(true);
[/color][/b]
ok ,sorry.
Imagen
;) ;) :pc: :num1: :num1: :num1:
El erick y sus gifs.... XD
:)
very good rafa :friends:

Waiting for more :pc:
Algunas funciones mas ;)
La verdad que es muy interesante.
Me imprimiré el Manual de Lua.

Pero creo que estaria bueno unas demostraciones.

Como por ejemplo... estas....

Código: Seleccionar todo

t={}
t[1]="a";
t[2]="b"
t[3]="c"
Y abajo de este codigo el video de la practica como se veria. En todo caso como y donde ingresaria los codigos antes mencionado.



Saludos rafa
# just use if index is number. examp:
t1 = { 1, 2, 3, 4 } -- #t = 4
t2 = { 1, 2, 3, 4, "a", false } -- #t = 6
t3 = { [1] = 1, [2] = 2, [3] = 3, [4] = 4 } -- #t = 4
t4= { [1] = 1, [2] = 2, [3] = 3, [4] = 4, ["a"] = 1, ["b"] = false} -- #t = 4

table t1 same t3, but table t2 is other table t4.
# also same table.getn(table).

and rafax, do you have any examp or tut of string.format :sorry: i read too much but i can't understand :sorry:

thank :yes:
nghethihieu escribió:# just use if index is number
Exactly, only works with numeric tables index
nghethihieu escribió:and rafax, do you have any examp or tut of string.format i read too much but i can't understand

thank
These helped me a lot to my.
http://lua-users.org/wiki/StringLibraryTutorial