代码之家  ›  专栏  ›  技术社区  ›  kolosy

模块v.F中的命名空间#

f#
  •  9
  • kolosy  · 技术社区  · 17 年前

    我有一个用f写的图书馆,由c和f使用。这个库定义了一个类 foo ,在模块中 bar ,在命名空间中 random :

    #light
    namespace random
    
    module bar
    
    type foo() = ...
    

    现在,当我进入消费类型 random.foo.bar ,C IntelliSense将其视为类型 酒吧 ,嵌套在类型中 random.foo .

    问题是:C将外部可消费的代码定义为模块而不是名称空间是否有好处?我知道模块是对函数进行分组的好方法,但是类呢?

    1 回复  |  直到 11 年前
        1
  •  16
  •   Community Mohan Dere    9 年前

    如果要从其他.NET语言发布F组件以供使用,则应避免公共接口中的模块,并坚持使用包含类、结构和枚举的命名空间。

    (模块是一种方便的方法,既可以在只包含f的组件之间发布值、函数和类型,也可以作为发布.NET类的f组件的“内部”实现细节。)

    (也看到 this question 讨论名称空间和模块之间的“技术区别”。上面的这个问题和我的答案更多的是关于“有意的差异”,例如,你什么时候会选择使用每一个。)