let test_smtp (smtp_server_address : string) (port : int) =
let hostEntry : IPHostEntry = Dns.GetHostEntry(smtp_server_address)
let endPoint : IPEndPoint = new IPEndPoint (hostEntry.AddressList[0], port)
( use tcpSocket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp)
tcpSocket.Connect(endPoint)
)
在上面不完整的代码片段中,
let endPoint : IPEndPoint = new IPEndPoint (hostEntry.AddressList[0], port)
生成两个错误。第一个表示找不到适当的重载方法。
我以前从未见过的第二个错误是
This value is not a function and cannot be applied.
我通过分配一个分配给 IPAddress 的单独 let 语句,并将错误映射到该行(未包含在上面的示例中)来将其隔离到hostEntry.AddressList[0]
。
我看过一些关于 F# 无法向上转换的文章,但我仍然有点困惑为什么会发生此错误。
正如kvb在评论中所说
a[0]
意思是"将a
视为应用于单个参数'仅包含零的列表'的函数"。
你想要
a.[0]
获取数组a
的零索引元素。
修复此问题后,类型推断将适用于重载解析,并且不需要强制转换等。