Funciones integradas
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 changeRun()
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 SubEval()
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. |