Моя папка содержит несколько файлов, которые составляются в таком порядке: global.ml
, zone.ml
, abs.ml
, main.ml
Удостоверения и глобальные переменные ссылочного для нескольких файлов
global.ml
содержит шаблонные переменные (например, let g1 = ref 0
) для всех файлов.
В zone.ml
есть декларация let f = !g1
.
В abs.ml
, есть g1 := 5
, который будет управлять main
в начале времени выполнения, я считаю, это как инициализация g1
с учетом реального контекста времени выполнения.
Позже main
позвонит Zone.f
. Любопытно, что я понимаю, что он принимает f = 0
вместо f = 5
.
Считаете ли вы, что это поведение нормальное? Если да, то что мне следует изменить, чтобы он учитывал текущее значение !g1
?
PS: Может быть, одно решение создать функцию let f v = v
в zone.ml
то пусть main
вызов Zone.f !g1
. Но у меня есть несколько глобальных ссылочных переменных как g1
в global.ml
, я надеюсь, что они могут быть действительными для всех файлов и функций, и я не хочу, чтобы они участвовали в сигнатуре функции.
Спасибо за ваш комментарий, вы объяснили, почему это происходит, но вы не объяснили, как его решить ... Я не могу изменить порядок компиляции этих файлов, что еще я могу сделать? – SoftTimur
Я добавил ** Редактировать ** с некоторыми предложениями. Но трудно понять, что предложить, не зная больше о вашем коде. –