2017-07-28 67 views
1

考虑:F# - 警告说,我不声明类型参数明确

type Service = Object 
type Services = ConcurrentDictionary<Type, Service> 

为什么会这样:

// If we use this form, we get a compiler warning: 
type GetService<'T> = Services -> 'T 
let GetService:GetService<'T> = fun services -> 
    services.[typeof<'T>] :?> 'T 

产生警告:

“的方法或函数 '的GetService'不应该给出明确的类型参数,因为它没有声明它的类型参数明确性。“

但这并不:

let GetService<'T> (services : Services) = 
    services.[typeof<'T>] :?> 'T 

用法示例:

let someService = services |> GetService<SomeServiceType> 

如果我要纠正的第一个版本,以免得到警告,我怎么会改变的定义?

回答

2

只要给它一个类型参数,就像错误消息所示。这应该工作:

let GetService<'T> : GetService<'T> = fun services -> 
    services.[typeof<'T>] :?> 'T 
+0

是的,工作。谢谢! –