Opened 10 years ago
Last modified 10 years ago
#1843 new defect
La función Unique tira TOL
Reported by: | jmarinero | Owned by: | Víctor de Buen Remiro |
---|---|---|---|
Priority: | normal | Milestone: | Mantainance |
Component: | Kernel | Version: | 3.2 |
Severity: | normal | Keywords: | |
Cc: |
Description
Buenas, adjunto un código que en otras ocasiones ha funcionado, pero que esta vez al correrlo, tira TOL
Hay que tener un forecast cargado. El que falla es este:
"M:\CokSpa\Fallo\For.CokeSpainMVA__20150220.oza"
El código se cae al ejecutar la sentencia:
Set conjVarsSimulables = Unique(aux);
Lo he solventado sustituyendo esto por:
Set auxClassified = Classify(aux, Real(NameBlock a, NameBlock b) { Real(Text a::GetName(?) < b::GetName(?)) }); Set conjVarsSimulables = EvalSet(Set auxClassified, NameBlock(Set grupo) { NameBlock grupo[1] });
así que no hay prisa ninguna.
Un saludo
Mi versión de tol 3.2 b020 y mi stdlib es la 0.17
Un saludo
Attachments (1)
Change History (3)
Changed 10 years ago by
Attachment: | ExtraccionVariablesI.tol added |
---|
comment:1 Changed 10 years ago by
comment:2 Changed 10 years ago by
Véase #1016.
Para comparar si dos nameblocks son el mismo (es decir, apuntan a la misma entidad: si cambias una propiedad de uno, cambia la del otro) y no que tienen las mismas propiedades y métodos, puedes usar: SameNameBlock
. Véase #1114.
Set conjVarsSimulables = EvalSet(Classify(aux, SameNameBlock), NameBlock (Set s) { s[1] });
Ciertamente Unique
no debería fallar, pero como también le pasan a otras funciones o métodos de comparación o conversión, aparecen problemas con los nameblocks, sobre todo si éstos contienen referencias cíclicas internamente.
No es que sea importante para el ticket en sí, pero corrijo el código que sustituía al Unique porque tenía un fallo.
El código que sí funciona sería:
Un saludo