当我在C#中有泛型函数时,泛型参数只定义函数的返回类型,F#似乎无法推断泛型参数。我也不知道如何键入 - 注释这个。
例如,以下C#函数在轻量级ORM中非常常见,例如dapper.net和ServiceStack-ORM-Lite:
public T Get<T>(string sql)
{
//....
var obj = Activator.CreateInstance<T>();
//....
return obj;
}
让我说我尝试在F#中使用它...首先通过类型推断:
let GetCustomer sql : Customer =
MyCSharpObj.Get(sql)
或者,我尝试注释该类型(甚至不确定这种语法是否正确):
let GetCustomer sql : Customer =
MyCSharpObj.Get<Customer>(sql)
在这两种情况下,我都会收到编译错误(在MyCSharpObj.Get
行上):
根据此程序点之前的信息查找不确定类型的对象。在此程序点之前可能需要类型注释来约束对象的类型。这可能允许解析查找。
如何在F#中使用此类方法?
答案 0 :(得分:4)
来自我的评论:
let GetCustomer (sql : string) : Customer = ..
它是“sql”,它无法识别类型,而不是返回值。