FSharp中的签名实现

时间:2014-12-05 10:22:07

标签: f# functional-programming

在Fsharp中实施签名

签名:MyLibrary.fsi

namespace myLib
module public MyModule1 =
    val addition : p:float -> float

实施:MyLibrary.fs

namespace myLib
module public MyModule1 = 
    let addition p = p*2.0

测试

#load "C:\@@@@@\Projects\MyLibrary.fsi"
#load "C:\@@@@@\Projects\MyLibrary.fs"
open myLib.MyModule1

错误:

  

C:\ @@@@@ \ Projects \ MyLibrary.fsi(1,1):错误FS0240:签名文件' FSI_0015_MyLibrary'没有相应的实现文件。如果存在实施文件,请检查'模块'和'命名空间'签名和实现文件中的声明匹配。

@@@@@相当于我的完整路径

2 个答案:

答案 0 :(得分:2)

希望我明白你的意思。如果你还需要,请告诉我吗?

module public MyModule =
        type IMyModule1 = 
            abstract member addition : double -> double
        type MyModule =
            interface IMyModule1 with 
                member this.addition p = p*2.0

答案 1 :(得分:1)

您获得的错误是因为您正在运行2个不同的加载语句。每个加载必须能够作为有效语句完成。如果你将这两个语句结合起来就可以了。你还需要逃避斜杠。我使用'@'前缀做到了这一点。这是一个例子:

#load @"C:\@@@@@\Projects\MyLibrary.fsi" @"C:\@@@@@\Projects\MyLibrary.fs"
open myLib.MyModule1