2017-04-18 56 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的零指標元素。

一旦你解決這個問題,類型推斷將用於重載決策工作,不需要投等