﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	severity	resolution	keywords	cc
879	Reassigning NameBlocks	pgea@…	Víctor de Buen Remiro	"Al usar BSR con ""modelDefs"" de tipo NameBlock que contienen series infinitas, nos encontramos con mensajes del tipo:
{{{
Warning: [] No se puede copiar una serie no acotada

Warning: [] No se puede aplicar PutValue (:=) a una serie temporal con otra que no tiene fechas acotadas, por lo que será truncada por las fechas por defecto en curso: [,]
}}}

Según parece el truncamiento de las series, se debe a la reasignación de un NameBlock.
(Véase stdlib/math/stat/models/bayesian/bysMcmc/_cycler.tol línea 61)

Podemos ver lo que ocurre con el ejemplo sencillo: 
{{{
NameBlock nb1 = [[ Serie serie = CalInd(C,C) ]];
NameBlock nb2 = [[ Real void = ? ]];
NameBlock nb2 := nb1;
}}}

Este comportamiento puede resultar un tanto inesperado ya que una asignación del tipo:
{{{
NameBlock nb1 = nb2;
}}}
se entiende como ""crea un nuevo NameBlock nb1 que apunte al mismo NameBlock que nb2"": Ref(nb1) = Ref(nb2);

Mientras que la reasignación:
{{{
NameBlock nb1 := nb2;
}}}
se entiende como ""modifica el NameBlock al que apunta nb1 copiando el contenido de nb2"": nb1 := Copy(nb2)

Este comportamiento es distinto al de los Set donde tanto la asignación como la reasignación actúan sobre la referencia:
{{{
Set st1 = st2;
Set st1 := st2;
}}}
Entendiéndose: Ref(st1) = Ref(st2) y Ref(st1) := Ref(st2) respectivamente.

Realmente no estoy en contra del criterio escogido, pues de hecho acostumbro a aprovechar esta circunstancia para ""destruir"" objetos haciendo:
{{{
NameBlock a := [[ Real NULL=? ]]
}}}

La alternativa es no utilizar NameBlock´s como referencias para ser resignadas sino conjuntos (Set) destinados a contener el NameBlock. Algo como:
{{{
Set nb1_ = [[ NameBlock nb1 = [[ Serie serie = CalInd(C,C) ]] ]];
Set nb2_ = [[ NameBlock nb2 = [[Real void = ? ]] ]];
Set nb2_ := nb1_;
}}}
Y según el criterio actual parece que es la StdLib la que tendría que cambiar eso.

Creo que quizá podría aprovecharse para revisar los criterios usados en la asignación y reasignación. Quizá podría abrirse un tique dedicado a eso. Yo sigo echando mucho de menos que no existan dos operadores distintos para ello.

Otra cosa que no entiendo, y quizá debería abrir un nuevo tique es, porqué no se pueden copiar las series infinitas. Supongo que el asunto éste de las series tiene algunas complicaciones que no 
adivino a imaginar. 
Quizá hubiera sido bueno tener dos tipos de objetos ""series finitas"" y ""series infinitas"" de manera similar a como existen Matrix y VMatrix, de modo que fuese fácil distinguir unas de otras.
"	defect	closed	highest		OOP		major	fixed		
