在实现文件中给出以下代码:
namespace Lib
module Test =
type ITest =
abstract member IsTest: bool
type T = Test with
interface ITest with
member this.IsTest = true
let create () = Test
以下签名文件:
namespace Lib
module Test =
[<Interface>]
type ITest =
abstract member IsTest: bool
type T
val create: unit -> T
发生以下警告:
警告2.类型实现接口'Test.ITest',但签名不会显示。您应该在签名中列出界面,因为界面可以通过动态类型转换和/或反射来发现。
如何在签名文件中更改T类型的签名以符合实现?
答案 0 :(得分:0)
您应该在模块签名(fsi)文件中的类型定义中列出接口,例如:
namespace Lib
module Test =
[<Interface>]
type ITest =
abstract member IsTest: bool
type T =
interface ITest
//you can list other interfaces here
val create: unit -> T
注意,在fsi文件中指定接口时没有成员列表(我们在定义类型IsTest
时省略了T
成员),成员列表应该是模块实现的一部分( fs)文件。
以上示例对F#4.0有效。由于OP使用F#-3.0标记标记了问题,因此旧F#的语法应该略有不同 - 在fsi文件中而不是
type T = ...
使用
type T with ...
如果您计划升级到F#4+,则必须像原始示例中那样进行更改。编译器将显示此更改的相关警告