2014-12-05 2 views
2

Осуществить подписи в FSharpПодпись в 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): error FS0240: The signature file 'FSI_0015_MyLibrary' does not have a corresponding implementation file. If an implementation file exists then check the 'module' and 'namespace' declarations in the signature and implementation files match.

@@@@@ является эквивалентом моего полного пути

+0

Вы не '# загружаете 'файл подписи. –

+0

Как мне создать «мост» между моей подписью и реализацией? В Java я бы написал: MyModule реализует iMyModule – user3711518

+0

Вы компилируете их в '.dll'. Кроме того, я думаю, что вы действительно хотите класс - вы делаете 'type t() = inherit something()', который похож на интерфейс java –

ответ

2

Надеюсь, я понял, что вы после этого. Пожалуйста, дайте мне знать, если вам нужно еще?

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

ошибка вы получаете, потому что вы работаете 2 разные заявления нагрузки. Каждая нагрузка должна быть выполнена как действительный оператор. Если вы объедините два заявления, они должны работать. Вам также необходимо избежать косой черты. Я сделал это, используя префикс @ @. Вот пример:

#load @"C:\@@@@@\Projects\MyLibrary.fsi" @"C:\@@@@@\Projects\MyLibrary.fs" 
open myLib.MyModule1 
Смежные вопросы