【问题标题】:module in F# interactive startup fileF# 交互式启动文件中的模块
【发布时间】:2011-05-20 21:18:18
【问题描述】:

我有一个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# 启动脚本中定义模块并自动打开模块?谢谢。

【问题讨论】:

    标签: f# f#-interactive


    【解决方案1】:
    [<AutoOpen>]
    module Util = 
       let cd path = ...
    

    【讨论】:

    • 这需要在顶部。如果我在module Util 上面有类型定义,它似乎不起作用...
    • @matlabdbuser - 不同之处在于,如果您使用=,您将在 F# 添加的(隐式)模块内创建一个模块(基于文件名)。如果没有=,它将覆盖默认模块名称。
    【解决方案2】:

    我相信您可以明确指定.fsx 文件中的所有代码都在某个模块中(例如Main)并将AutoOpen 属性添加到模块中:

    [<AutoOpen>]
    module Main
    
    let foo = 10
    

    当您随后#load 文件时,foo 值应该在顶层可见。

    【讨论】:

      猜你喜欢
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多