Я не эксперт в FSI, но некоторые эксперименты показывают, что пространства имен поддерживаются только объявлениями #load
(не через обычные взаимодействия - отправка группы объявлений пространства имен в VFSI через Alt-Enter не работает), и что разные взаимодействия дают разные «экземпляры». Например, с кодом файла
namespace Foo
type Bar() =
member this.Qux() = printfn "hi"
namespace Other
type Whatever() = class end
namespace Foo
module M =
let bar = new Bar()
bar.Qux()
если я #load
получу его более одного раза, например
* +1007 *
Обратите внимание, что кажется, что FSI_0003.Foo.Bar скрывает версию FSI_0002.
Так что я думаю, что часть спецификации F #, которая гласит
В пределах группы объявлений пространства имен,
само пространство имен неявно
открывается, если любое предыдущее пространство имен
группы объявлений или ссылки
Ассамблеи способствуют этому
пространство имен, например
namespace MyCompany.MyLibrary
module Values1 =
let x = 1
namespace MyCompany.MyLibrary
// Implicit open of MyCompany.MyLibrary bringing Values1 into scope
module Values2 =
let x = Values1.x
Однако, это только открывает пространство имен
в соответствии с предшествующим пространством имен
группы объявлений.
Не взаимодействует с FSI, учитывая ограниченное понимание FSI пространств имен. В частности, я ожидаю, что откроется «вторая #load» из вашего примера, например, Версия пространства имен FSI_000N+1
, тогда как предыдущий код был FSI_000N
. Что, возможно, объясняет, почему явное взаимодействие open
исправляет это; Вы переносите существующий неотмеченный материал FSI_000N
на верхний уровень, прежде чем пытаться (неявно) ссылаться на него позже.