Funciones integradas
11 min
brightscript incluye un conjunto de funciones intrínsecas integradas con alcance de módulo también hay disponibles varias funciones de e/s de archivos, cadenas, matemáticas y sistema mediante el objeto roglobal type() type(a as variable) as string esta función devuelve el tipo de la variable y/u objeto pasado getglobalaa() getglobalaa() as object esta función obtiene el arreglo asociativo global para el script actual rnd() rnd(range as integer) as integer rnd(0) as float si se pasa un entero positivo distinto de cero, esta función devuelve un entero pseudoaleatorio entre 1 y el valor del argumento el rango incluye el valor del argumento por ejemplo, llamar a rnd(55) devolverá un entero pseudoaleatorio mayor que 0 y menor que 56 si el argumento es 0, esta función devuelve un valor float pseudoaleatorio entre 0 y 1 nota las funciones rnd() utilizan un número semilla pseudoaleatorio que se genera internamente y no es accesible para el usuario box() box(type as dynamic) as object esta función devuelve una versión de objeto del tipo intrínseco especificado los objetos se pasarán sin modificaciones ejemplo b = box("string") b = box(b) ' b does not change run() ejecutar(file name as string, \[optional arg as dynamic, …]) as dynamic ejecutar(file names as roarray, \[optional arg as dynamic, …]) as dynamic esta función ejecuta uno o más scripts desde el script actual puede agregar argumentos opcionales, que se pasarán a la función main() de los scripts el script llamado también puede devolver argumentos al script que realiza la llamada si se pasa un nombre de archivo de cadena, la función compilará y ejecutará el archivo correspondiente si se pasa un arreglo de archivos, la función compilará cada archivo, los vinculará entre sí y los ejecutará ejemplo sub main() run("test brs") breakifrunerror(line num) print run("test2 brs", "arg 1", "arg 2") if run(\["file1 brs","file2 brs"])<>4 then stop breakifrunerror(line num) stop end sub sub breakifrunerror(ln) el=getlastruncompileerror() if el=invalid then el=getlastrunruntimeerror() if el=\&hfc or el=\&he2 then return 'fc==err normal end, e2=err value return print "runtime error (line ";ln;") ";el stop else print "compile error (line ";ln;")" for each e in el for each i in e print i;" ";e\[i] end for end for stop end if end sub eval() eval(code snippet as string) as dynamic esta función ejecuta el fragmento de código pasado en el contexto de la función actual la función compila el fragmento y luego ejecuta el byte code si el código se compila y ejecuta correctamente, devolverá cero si el código se compila correctamente, pero encuentra un error de tiempo de ejecución, devolverá un entero que indica el código de error (usando los mismos códigos que la función getlastrunruntimeerror() ) si la compilación falla, devolverá un objeto rolist ; la estructura rolist es idéntica a la de la función getlastruncompileerror() la función eval() puede ser útil en dos casos cuando necesita generar código dinámicamente en tiempo de ejecución cuando necesita ejecutar una instrucción que podría producir un error de tiempo de ejecución, pero no desea que la ejecución del código se detenga ejemplo print eval("1/0") 'returns a divide by zero error getlastruncompileerror() getlastruncompileerror() as rolist esta función devuelve un objeto rolist que contiene errores de compilación (o invalid si no ocurrieron errores) cada entrada de rolist es un objeto roassociativearray que contiene las siguientes claves errstr el tipo de error de compilación (como string) filespec el uri de archivo del script que contiene el error (como string) errno el número de error (como integer) lineno el número de línea donde ocurre el error (como integer) los siguientes son posibles valores de errno código de error descripción descripción ampliada \&hbf 191 err nw endwhile aparece sin una instrucción \&hbe 190 err missing endwhile la instrucción mientras aparece sin la instrucción endwhile \&hbc 188 err missing endif se llegó al final del script sin encontrar una instrucción endif \&hbb 187 err noln no se encontró el número de línea \&hba 186 err lnseq error en la secuencia del número de línea \&hb9 185 err loadfile error al cargar el archivo \&hb8 184 err nomatch la instrucción partido no coincide \&hb7 183 err unexpected eof se encontró un final inesperado de cadena durante la compilación de la cadena \&hb6 182 err for next mismatch la variable en siguiente no coincide con para \&hb5 181 err no block end \&hb4 180 err labeltwice la etiqueta se definió más de una vez \&hb3 179 err untermed string la cadena literal no tiene comillas de cierre \&hb2 178 err fun not expected \&hb1 177 err too many const \&hb0 176 err too many var \&haf 175 err exit while not in while \&hae 174 err internal limit exceded \&had 173 err sub defined twice \&hac 172 err nomain \&hab 171 err foreach index tm \&haa 170 err ret cannot have value \&ha9 169 err ret must have value \&ha8 168 err fun must have ret type \&ha7 167 err invalid type \&ha6 166 err nolonger funcionalidad ya no compatible \&ha5 165 err exit for not in for \&ha4 164 err missing initilizer \&ha3 163 err if too large \&ha2 162 err ro not found \&ha1 161 err too many labels \&ha0 160 err var cannot be subname \&h9f 159 err invalid const name \&h9e 158 err const folding getlastrunruntimeerror() getlastrunruntimeerror() as integer esta función devuelve el código de error que resultó de la última función run() estos códigos indican un resultado normal código de error descripción descripción ampliada \&hff 255 err okay \&hfc 252 err normal end la ejecución terminó normalmente, pero con terminación (p ej , end, shell "exit", ventana cerrada) \&he2 226 err value return return ejecutado con valor devuelto en la pila \&he0 224 err no value return return ejecutado sin valor devuelto en la pila los siguientes códigos indican errores en tiempo de ejecución código de error descripción descripción ampliada \&hfe 254 err internal ocurrió una condición inesperada \&hfd 253 err undefined opcd no se pudo manejar el opcode \&hfb 251 err undefined op no se pudo manejar el operador de expresión \&hfa 250 err missing parn \&hf9 249 err stack under no hay ningún valor para extraer de la pila \&hf8 248 err break scriptbreak() función llamada \&hf7 247 err stop declaración stop ejecutada \&hf6 246 err ro0 bscnewcomponent falló porque no se encontró la clase del objeto \&hf5 245 err r01 la llamada a la función miembro de brightscript no tiene el número correcto de parámetros \&hf4 244 err ro2 no se encontró la función miembro de brightscript en el objeto o la interfaz \&hf3 243 err ro3 la interfaz de brightscript no es miembro del objeto \&hf2 242 err too many param demasiados parámetros de función para manejar \&hf1 241 err wrong num param número incorrecto de parámetros de función \&hf0 240 err rvig la función devuelve un valor, pero se ignora \&hef 239 err notprintable valor no imprimible \&hee 238 err notwaitable espera no se puede aplicar al objeto porque el objeto no tiene una interfaz romessageport \&hed 237 err must be static las llamadas de interfaz del tipo rotinterface deben ser estáticas \&hec 236 err ro4 operador de punto " " usado en un objeto que no contiene una referencia válida de objeto o interfaz \&heb 235 err notypeop operación intentada en dos operandos sin tipo \&he9 233 err use of uninit var variable no inicializada utilizada ilegalmente \&he8 232 err tm2 índice no numérico aplicado al arreglo \&he7 231 err arraynotdimmed \&he6 230 err use of uninit brsubref referencia a sub no inicializado \&he5 229 err must have return \&he4 228 err invalid lvalue el lado izquierdo de la expresión no es válido \&he3 227 err invalid num array idx el número de índices de matriz no es válido \&he1 225 err unicode not supported \&he0 224 err notfunopable \&hdf 223 err stack overflow \&h20 32 err cn continuar ( cont o c ) no permitido \&h1c 28 err stringtolong \&h1a 26 err os se ha agotado el espacio de cadena \&h18 24 err tm se ha producido una incompatibilidad de tipos (incompatibilidad de operación de cadena/número) \&h14 20 err div zero \&h12 18 err dd se intentó redimensionar la matriz \&h10 16 err bs subíndice de matriz fuera de límites \&h0e 14 err missing ln \&h0c 12 err outofmem \&h08 8 err fc parámetro no válido pasado a la función/matriz (p ej , una dimensión de matriz negativa o raíz cuadrada) \&h06 6 err od datos agotados (read) \&h04 4 err rg retorno sin gosub \&h02 2 err syntax \&h00 0 err nf siguiente sin para