#f# #f#-interactive
#f# #f #-интерактивный
Вопрос:
У меня есть finit.fsx
файл, который нужно загрузить в fsi.exe запуск, подобный:
#r xxxx
type xx = xxx
module Util =
let cd path = xxxx
...
После запуска fsi.exe он загружается как
namespace FSI_0002
module Util = begin
val cd : string -> unit
...
end
Проблема в том, как я могу использовать module util
? Я не могу open Util
использовать cd
напрямую.
Чтобы еще больше озадачить меня, если я помещу пространство имен в верхнюю строку, например namespace Test
, в fsi.exe он загружается как
namespace FSI_0002.Test
val cd : string -> unit
...
Где находится Module Util
? Затем я должен open Test;;
затем Util.cd
.
Есть ли способ определить модуль в сценарии запуска F # и автоматически открыть модуль? Спасибо.
Ответ №1:
Я полагаю, вы можете явно указать, что весь код в .fsx
файле находится в некотором модуле (скажем, Main
) и добавить AutoOpen
атрибут к модулю:
[<AutoOpen>]
module Main
let foo = 10
Когда вы затем #load
запустите файл, foo
значение должно быть видно на верхнем уровне.
Ответ №2:
[<AutoOpen>]
module Util =
let cd path = ...
Комментарии:
1. это должно быть вверху. Если у меня есть определение типа выше
module Util
, похоже, это не работает…2. @matlabdbuser — Разница в том, что при использовании
=
вы создаете модуль внутри (неявного) модуля, добавленного F # (на основе имени файла). Без=
он переопределяет имя модуля по умолчанию.