Mi carpeta contiene varios archivos, que se compilan en este orden: global.ml
, zone.ml
, abs.ml
, main.ml
Declaraciones y variables de referencia a nivel mundial para varios archivos
global.ml
contiene algunas variables de referencia (por ejemplo let g1 = ref 0
) para todos los archivos.
En zone.ml
hay una declaración let f = !g1
.
En abs.ml
, no es g1 := 5
, que será dirigido por main
en el comienzo del tiempo de ejecución, lo considero como una inicialización de g1
dado el contexto en tiempo de ejecución real.
Más tarde main
llamará al Zone.f
. Curiosamente, me doy cuenta es que toma f = 0
en lugar de f = 5
.
¿Crees que este comportamiento es normal? Si es así, ¿qué debo cambiar para que tome en cuenta el valor actual de !g1
?
PS: Tal vez una solución consiste en hacer una función let f v = v
en zone.ml
luego dejar main
llamada Zone.f !g1
. Pero tengo varias variables de referencia globales como g1
en global.ml
, espero que puedan ser válidas sobre todos los archivos y funciones, y no quiero involucrarlos en la firma de una función.
Gracias por su comentario, explicó por qué sucede, pero no explicó cómo resolverlo ... No puedo cambiar el orden de compilación de estos archivos, ¿qué más puedo hacer? – SoftTimur
Agregué ** Editar ** con algunas sugerencias. Pero es difícil saber qué sugerir sin saber más acerca de su código. –