有没有办法避免在F#中获取类实例的参数上使用显式类型注释?

时间:2013-09-27 20:07:37

标签: f#

F#中的类型推断似乎不适用于应该采用类类型值的参数。 有没有办法避免对这些参数进行显式类型注释? 它看起来像一个问题,因为当有大约5个这样的参数时,每个参数都需要它的一对括号和一个冒号和一个类型的名称,它看起来比C#中的相同声明更加混乱,因为它在语法上更加嘈杂。

所以不是

let writeXmlAttribute (writer: XmlWriter) name value = ()

我希望我能写出像

这样的东西
let writeXmlAttribute writer name value = () // <-- a problem when in comes to writer.WriteStartAttribute name

有没有办法可以逃脱它?

更新:

记录没有这样的问题,只在课上。

1 个答案:

答案 0 :(得分:3)

如果您想避免这种情况的主要原因是更清晰的签名,您可以使用upcast将显式类型移动到函数中(由于它是编译时确定,它将推断参数类型)。你没有避开它,但是,你只是在移动它。

let writeXmlAttribute writer name value = 
    (writer :> XmlWriter).WriteStartAttribute(name, value)

对于会员(包括记录中的成员),您要求的推理类型有困难,因此在任何情况下您都必须至少进行少量的显式输入。