具有相同名称的模块和类

时间:2014-07-10 19:39:52

标签: f# f#-3.1

这是允许的:

type Test = class end

[<CompilationRepresentation (CompilationRepresentationFlags.ModuleSuffix)>]
module Test = begin end

但这不是:

[<CompilationRepresentation (CompilationRepresentationFlags.ModuleSuffix)>]
module Test = begin end

type Test = class end

为什么?

在第二种情况下,错误是:类型或模块的重复定义&#39;测试&#39;。

我希望能够定义一些类型所需的公共[<Literal>]常量,并且对于具有相同名称的模块内的类型用户来说很重要。

1 个答案:

答案 0 :(得分:13)

您可以打开类型声明,关闭它并稍后重新打开,如下所示:

type Test = class end

[<CompilationRepresentation (CompilationRepresentationFlags.ModuleSuffix)>]
module Test =
    [<Literal>]
    let myLiteral = "myLiteral"

type Test with
    static member test = ()

我一直使用这个技巧;)