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 :
o
En este caso si utilizamos el operador seria asi:
En el caso de tablas con otro indice no numérico no funciona y da 0 para eso usaremos table.count, por ejmplo:
Operador utilizado en strings , seria lo mismo que String.Length, por ejemplo:
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:
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...
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:
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:
en caso 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:
Esta función la uso mucho para filtrar valores de typo en las funciones:
Editando...
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"
t={"a","b","c"};
Debug.ShowWindow(true);
Debug.Print(#t);-- esto seria = que Table.Count(t) , y nos daría resultado 3.
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.
str="Hola Mundo";
Debug.ShowWindow(true)
Debug.Print(#str);-- el resultado seria 10 = que String.Length(str);
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"
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.
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));
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
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.
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"
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...