【发布时间】:2017-04-18 19:50:32
【问题描述】:
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)
)
在上面不完整的代码sn-p中,
let endPoint : IPEndPoint = new IPEndPoint (hostEntry.AddressList[0], port)
产生两个错误。第一个表示找不到合适的重载方法。
第二个错误,我之前没见过,是
This value is not a function and cannot be applied.
我通过单独的 let 语句将其与hostEntry.AddressList[0] 隔离开来,该语句分配给 IPAddress,并将错误映射到该行(不包括在上面的示例中)。
我看过一些关于 F# 无法向上转换的文章,但对于为什么会发生此错误,我仍然有些困惑。
【问题讨论】:
-
你需要使用
.[0]来索引一个集合——否则它会被解析为对列表应用一个函数[0]。