F#中的类型推断似乎不适用于应该采用类类型值的参数。 有没有办法避免对这些参数进行显式类型注释? 它看起来像一个问题,因为当有大约5个这样的参数时,每个参数都需要它的一对括号和一个冒号和一个类型的名称,它看起来比C#中的相同声明更加混乱,因为它在语法上更加嘈杂。
所以不是
let writeXmlAttribute (writer: XmlWriter) name value = ()
我希望我能写出像
这样的东西let writeXmlAttribute writer name value = () // <-- a problem when in comes to writer.WriteStartAttribute name
有没有办法可以逃脱它?
更新:
记录没有这样的问题,只在课上。
答案 0 :(得分:3)
如果您想避免这种情况的主要原因是更清晰的签名,您可以使用upcast将显式类型移动到函数中(由于它是编译时确定,它将推断参数类型)。你没有避开它,但是,你只是在移动它。
let writeXmlAttribute writer name value =
(writer :> XmlWriter).WriteStartAttribute(name, value)
对于会员(包括记录中的成员),您要求的推理类型有困难,因此在任何情况下您都必须至少进行少量的显式输入。