1

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

所以,而不是

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

我希望我能写出类似的东西

let writeXmlAttribute writer name value = () // <-- a problem when in comes to writer.WriteStartAttribute name

有没有办法让我摆脱它?

更新:

记录没有这样的问题,只有类。

4

1 回答 1

3

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

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

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

于 2013-09-27T21:43:44.320 回答