В этом контексте значение x
компилируется как статическое поле модуля main
(представленного в виде класса).
Я думаю, вы всегда сможете увидеть его в окне часов, если введете Foo.main.x
(где Foo
- пространство имен вашего файла - если вы не предоставите пространство имен явно, это будетгенерируется из имени файла, такого как foo.fs
в данном случае).
Почему вы видите переменную, если добавляете ignore
?Я не совсем уверен - возможно, потому, что компилятор F # устанавливает точку останова в каком-то месте того же класса, где находится x
(как поле).Поиск, выполняемый отладчиком, следует правилам C # (.NET), поэтому он смотрит на скомпилированный код, а не на исходный код F # (поскольку интеграция F # не обеспечивает своего собственного преобразователя).
В общемВы можете предположить, что локальные переменные можно просматривать, если вы находитесь внутри функции, в которой они объявлены.Захваченные переменные в замыкании могут быть обычно доступными с использованием this
(который дает ссылку на объект замыкания), но это может зависеть от некоторых внутренних компонентов компилятора.