2017-04-18 101 views
1
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) 
    ) 

在上面的不完整代码段,IPEndpoint必须上传吗?为什么?

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#的文章无法上传,但我仍然有点困惑,为什么会出现这个错误。

+4

您需要使用'[0]'索引到一个集合 - 否则它解析为应用功能到列表'[0]'。 – kvb

回答

3

作为KVB在注释所述

a[0] 

指“治疗a随着施加到单个参数‘只包含零列表’的函数”。

你想

a.[0] 

得到阵列a的零指标元素。

一旦你解决这个问题,类型推断将用于重载决策工作,不需要投等

相关问题