модуль в файле интерактивного запуска F #

#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 # (на основе имени файла). Без = он переопределяет имя модуля по умолчанию.