Opened 14 years ago
Closed 14 years ago
#1201 closed doubt (fixed)
Unexpected error using Ois.Load
Reported by: | Pedro Gea | Owned by: | Víctor de Buen Remiro |
---|---|---|---|
Priority: | normal | Milestone: | Mantainance |
Component: | Kernel | Version: | head |
Severity: | normal | Keywords: | |
Cc: |
Description
Se ha encontrado un error inesperado al cargar un archivo OZA utilizando la última versión de TOLBase que no ocurría anteriormente.
Para repoducirlo basta hacer:
Set Ois.Load(".../dataset.oza"); //> ERROR: [] set is not a valid object for type Set.
Adjunto el archivo oza.
Attachments (1)
Change History (6)
Changed 14 years ago by
Attachment: | dataset.oza added |
---|
comment:1 Changed 14 years ago by
comment:2 Changed 14 years ago by
Con lo de ".../dataset.oza" quería dar a entender la ruta donde sea que descargues el archivo, por ejemplo "C:/Temp/dataset.oza".
Probaré con la release 4 a ver qué ocurre.
comment:3 Changed 14 years ago by
Type: | defect → doubt |
---|
Ciertamente ya no da el error sino la advertencia que indicabas.
Yo no soy el autor del timeset que da esa extraña advertencia, ¿podrías explicar mejor en qué consiste la limitación en el almacenamiento de timesets? ¿disponemos de alguna función o mecanismo que nos permita identificar si un timeset (o una serie que lo contenga) es almacenable? ¿hay algún mecanismo para hacer almacenable en ois un timeset y evitar así la posterior advertencia en la carga?
comment:4 Changed 14 years ago by
Pues la verdad es que no sé qué más añadir a lo dicho en #1199.
Si se trata de un conjunto acotado no hay ningún problema pues no necesitamos la expresión para nada, con la caché almacenada es suficiente.
Si se trata de un conjunto no acotado entonces la única forma de reconstruirlo es mediante una expresión que sea evaluable en el momento de la carga.
Si se usan expresiones que sólo dependen de constantes está claro que no va a haber problemas, lo mismo que si se usan sólo variables del built-in del sistema o de la StdLib.
Si en la expresión se usan sólo variables en el ámbito global del código básico del proyecto, o bien miembros directos o indirectos de un NameBlock o un Set accesible globalmente, entonces todos los programas que se carguen ese código básico también podrán cargar el OZA.
Las variables utilizadas deben ser pues de esta forma
Global; Global::Miembro; Global::Miembro::...::Miembro; Global[n]; Global[nombre];
No sé si se me escapa alguna otra forma pero es muy simple: si se puede evaluar en el ámbito global no salta el mensaje.
La forma más segura para que todo vaya bien es que los conjuntos temporales se definan en el código del proyecto y luego usar directamente sus nombres, con o sin prefijos ::
u otras formas de acceso, especialmente si se trata de expresiones muy complejas.
De esa forma no aparece el mensaje de warning en la carga, y si luego alguien intenta cargar el OZA sin haber definido el TimeSet Fulanito le dará un Warning de que no existe el TimeSet Fulanito, que es algo mucho más fácil de perseguir que una expresión. El OZA cargará sin problemas como hasta ahora, siempre y cuando no se pretenda usar ese TimeSet fuera del intervalo de la caché.
comment:5 Changed 14 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
A mí lo que me dice es
ya que no existe el path
.../
poniendo
./
lo que me da es un WarningTiene relación con el ticket #1199
Puesto que es muy peligroso utilizar fechados cuya expresión no sea reconstruible en la carga se desaconseja el uso de expresiones como esa que usan símbolos locales. En este caso concreto Trimestral es una variable del sistema y no entiendo porqué se crea otra variante pero eso es lo de menos.
Pasar no pasa nada por lo general, sólo es un warning y todo funcionará igual en la mayoría de las ocasiones, pero como no puede reconstuirse el TimeSet infinito se queda sólo como la caché y como quieras hacer algo con él fuera del intervalo almacenado te puede pasar cualquier cosa.
Imagino que te has bajado la relase 3 que sacaba los mensajes de error que podían despistar, aunque en realidad todo funcionaba sin problemas normalmente.
Prueba con la release 4 que debería funcionarte y ya me dirás. Tanto la oficial como la de desarrollo tienen una release 4 con ese cambio.