我有以下工作的F源文件
namespace Namspa1
[<AutoOpen>]
module M1 =
let [<Literal>] constant1 = "Hello, "
type Greeter(name) =
member x.Greet() = sprintf "%s%s" constant1 name
module M2 =
let greet name = Greeter(name).Greet()
这是可行的,但我想要的是在定义Constant1的同一模块M1中定义函数greet。
换句话说,只使用一个我想获取的文件
Namspa1.M1.constant1
Namspa1.Greeter
Namspa1.M1.greet //not Namspa1.M2.greet
-
常量1是一个值,因此必须在模块内
-
greater使用constant1,所以必须在文件的后面;我希望它在名称空间中,而不是在模块中,所以它是不缩进的
-
最后,greet是一个函数,所以它必须在一个模块中,我想使用相同的模块m1。它还使用了问候语,因此它必须位于类型定义之后。
如果我尝试将问候语函数定义更改为
module M1 =
let greet name = Greeter(name).Greet()
我得到一个M1的重复定义错误。
我该怎么做?
编辑
有人建议使用属性compilationrepresentation(compilationrepresentationflags.modulesuffix)修复重复定义错误,这是正确的,因此感谢您的帮助。
但是我的请求是关于扩展M1。我希望能够像在m1中定义函数一样使用m1.greet。
例如,如果我尝试在外部使用定义(例如另一个源文件),我可以使用m2.greet,所以我想使用m1.greet,这对于属性来说是不可能的。