#635 closed doubt (fixed)
Método de almacenamiento DataSets
Reported by: | Ines Miranda | Owned by: | Pedro Gea |
---|---|---|---|
Priority: | major | Milestone: | Release 0.6 |
Component: | Variables | Keywords: | almacenamiento, método, dataset, variables originales |
Cc: |
Description
Hola,
en estos momentos, si queremos almacenar variables en DataSets, tenemos las opciones de almacenado:
"Heavy" -> con datos
"Light" -> sólo definición (sin datos)
"Default" -> estado en que se encuentre
Se podría implementar un método de almacenamiento con datos sólo para variables originales (sin dependencias)?
Gracias
Change History (4)
comment:1 Changed 14 years ago by
comment:2 Changed 14 years ago by
Como comentas, las variables triviales o declaradas como trivial no hacen caché de sus datos ni los almacenan. Quizá lo interesante es distinguir cuándo una variable es trivial.
Habitualmente se confunden dos aspectos: variable trivial y variable dependiente, pero puede darse el caso de trivial e independiente y el caso de dependiente y no trivial. Veamos:
- No trivial e independiente: Es el caso más común y el más elemental,
la expresión obtiene los datos usando métodos específicos de tu proyecto o
acceciendo a fuentes de datos:
...::CreateVariable([[ Text _.name = "Variable1"; Text _.expression = "Serie ObtenerDatos(1, 2)"; ... ]]);
- Trivial e independiente: Este caso quizá no se utiliza mucho pero
puede ser también bastante común. Puede usarse cuando la expresión puede ser
evaluada sin problemas en cualquier contexto:
...::CreateVariable([[ Text _.name = "Variable2"; Text _.expression = "Serie SubSer(Pulse(y2000, C), y1990, y2020)"; Real _.isTrivial = True; ... ]]);
- Trivial y dependiente: Este caso es el más común y el más sensato
al declarar variables dependientes:
...::CreateVariable([[ Text _.name = "Variable3"; Text _.expression = "Serie %1 + %2"; Real _.isTrivial = True; Set _.dependences = [["Variable1", "Variable2"]] ... ]]);
- No trivial y dependiente: Este caso podría considerarse nada recomendable, pero nada te impide definirlo:
Sin embargo ésto puede ser más sutil de lo que parece, por ejemplo si usamos una función de ámbito local de nuestro proyecto:
...::CreateVariable([[ Text _.name = "Variable4"; Text _.expression = "Serie ObtenerDatos(1, 2) + %1"; Set _.dependences = [["Variable2"]] ... ]]);
...::CreateVariable([[ Text _.name = "Variable5"; Text _.expression = "Serie OperacionParticular(%1)"; Set _.dependences = [["Variable1"]] ... ]]);
comment:3 Changed 14 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
Type: | enhancement → doubt |
La cuestión sobre cuándo una expresión puede o no ser trivial es algo delicado, ya que desde TOL no disponemos de un mecanismo sencillo para saber si una expresión podrá ser evaluada en un contexto estándar.
MMS hace un análisis de la expressión e intenta determinar si las variables y funciones utilizadas son estándares o no.
A raíz de este tique se detectan dos errores:
- Los comentarios en la expresión se tratan como parte de la expresión.
- Algunas funciones como
SetOfSerie
se están impidiendo la declaración de trivialidad.
Creo un nuevo tique (#639) para estas tareas y dejo éste como un tique de tipo duda.
comment:4 Changed 14 years ago by
Respecto a tus comentarios, quizá la palabra trivial puede ser confusa o ambigua, cuando se indica trivial se está pensando en la acepción de que no incorpora información nueva o que para su evaluación no se necesita información adicional, es sencilla y puede evaluarse en no importa cualquier momento, de modo que no hace falta cachear los datos ni almacenarlos.
Respecto a si funciona el uso de Real _.isTrivial = ?
yo creo que en general sí va bien. Si encuentras alguna dificultad coméntalo en el tique #639 (o crea uno nuevo) indicando la expresión en la que falla.
Hola,
he visto en el ticket #482 que, definiendo el atributo Real _.IsTrivial = 0 para variables originales y Real _.IsTrivial = 1, para las variables dependientes, cuando almacenamos con opción "Heavy" obtenemos precisamente mi petición de arriba.
Sólo comentar dos cosas:
2.Si ejecuto Real _.IsTrivial = ?, para chequear y declarar si la variable es trivial o no, siempre me declara Real _.IsTrivial = 1. Y en este caso, tengo tanto variables originales como dependientes. Parece que no está funcionando, no?
Gracias