...
Efectivamente se puede poner una variable con el mismo nombre que un parametro o dependencia de componente. Ver el incidente O3SIMDEV-301 para la politica La estrategia de resolución que se utiliza cuando los nombres son iguales, se describe a continuación.
En primer lugar, en el contexto de evaluación de expresiones se cuenta con los siguientes nombres:
- Nombres de variables agregadas por la simulación:
- sceneId: Es el escenario corriente.
- time: Es la fecha en la cual se esta calculando.
- year: Es un sinónimo de la expresión Año(time). Su alteración no cambia el tiempo de simulación (time).
- month: Es un sinónimo de la expresión Mes(time). Su alteración no cambia el tiempo de simulación (time).
- day: Es un sinónimo de la expresión Día(time). Su alteración no cambia el tiempo de simulación (time).
- Nombres de variables introducidas por el componente, de las cuáles podemos distinguir 2 tipos a los efectos de la presente explicación:
- Elementos: se refiere a los nombres de los atributos de los elementos.
- Nombres de variables del componente.
- Nombres de variables introducidas por dependencias de componentes.
- Nombres de parámetros locales y globales.
Considerando lo anterior, en la evaluación de una expresión cualquiera el orden de resolución de los nombres, es el siguiente:
- Se busca el nombre como variable definida en la expresión. Ej: x=10.
- Se considera cualquiera de las variables introducidas por el simulador que se comentaron anteriormente (sceneId, time, ....), los elementos y las variables introducidas por el componente (éstas deben tener nombres distintos).
- Se trata de resolver la variable como nombre de parámetro o variable introducida por dependencia de componente (éstas deben tener nombres distintos).
- Si no se encuentra valor para el nombre en estas condiciones se obtiene NULO.
Notas:
- El orden en el que se declaran las variables en el componente es relevante en el sentido de que se calculan en precisamente ese orden.
- Cualquiera de los nombres si contiene espacio debe ser utilizado con la funcion correspondiente (Parametro o Variable).
La funcion parametro obtiene el valor del parametro con el nombre indicado. Tomar en cuenta que el nombre es un string. La funcion parametro ademas tiene la capacidad de sobreescribir el contexto con el que se busca el parametro, esta sobre-escritura es exclusivamente para la invocación.
La funcion variable obtiene el valor de la variable con el nombre indicado. Como antes el nombre es un string.
Como se menciono en O3SIMDEV-287 las variables introducidas por dependencia de componente deben manejarse como si fueran parametros (usar funcion Parametro).
-------------------------------------------------------------------------------------------------
Superposiciones de nombre no validas:
En los siguientes casos se especifican situaciones no validas, en general se comenta que puede pasar si el caso se da, pero dado que no es la idea que pase en un futuro esto puede dar otro resultado.
- No tiene sentido que las variables introducidas por los elementos choquen con las introducidas por las variables del componente (en el caso ganaran los elementos).
- No tiene sentido que los elementos o las variables sobreescriban las definidas por el simulador, por ejemplo declarar una variable month es un error (en el caso gana la variable declarada).
- No tiene sentido declarar 2 parametros con el mismo nombre (ganaria el primero definido). Tampoco es valido redefinir un parametro localmente para que sobreescriba el global (ganaria la local).
- No tiene sentido definir dos variables obtenidas por dependencia de componente con el mismo nombre (ganaria la primera).
- No tiene sentido declarar parametros y variables de componentes con el mismo nombre (si llegara a pasar ganaria el parametro).
Nota: Los datos obtenidos por dependencia de componentes son equivalentes a los obtenidos por parametros, es decir, si hubiera que resolver una ambiguedad se lo debe considerar un parametro (ej: funcion Parámetro).
Ver los siguientes ejemplos:
...