【问题标题】:Modules v. namespaces in F#F# 中的模块与命名空间
【发布时间】:2010-11-12 10:20:03
【问题描述】:

我有一个用 F# 编写的库,供 C# 和 F# 使用。这个库定义了一个类foo,在模块bar,在命名空间random

#light
namespace random

module bar

type foo() = ...

现在,当我使用 random.foo.bar 类型时,C# intellisense 将其视为 bar 类型,嵌套在 random.foo 类型中。

问题是:C# 将可外部使用的代码定义到模块中而不是命名空间中是否有优势?我知道模块是对函数进行分组的好方法,但是类呢?

【问题讨论】:

标签: f#


【解决方案1】:

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

(模块是一种在 F#-only 组件之间发布值、函数和类型的便捷方式,或者作为发布 .Net 类的 F# 组件的“内部”实现细节。)

(请参阅 this question 以讨论命名空间和模块之间的“技术区别”。这个问题和我上面的回答更多地是关于“有意的差异”,例如何时选择使用它们。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-22
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    相关资源
    最近更新 更多