2017-04-18 4 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) 
    ) 

in dem unvollständigen Codefragment obenMuss IPEndpoint neu erstellt werden und warum?

let endPoint : IPEndPoint = new IPEndPoint (hostEntry.AddressList[0], port)

erzeugt zwei Fehler. Die erste zeigt an, dass eine geeignete Überladungsmethode nicht gefunden werden kann.

Der zweite Fehler, die ich noch nie zuvor gesehen haben, ist

This value is not a function and cannot be applied.

ich dies zum hostEntry.AddressList[0] isoliert eine separate let Anweisung aufweist, die eine IP-Adresse zugewiesen, und die auf diese Zeile abgebildet Fehler (nicht im obigen Beispiel enthalten).

Ich habe einige Artikel über F # gesehen, die nicht in der Lage sind, Upcasts zu erstellen, aber ich bin immer noch ein wenig verwirrt, warum dieser Fehler auftritt.

+4

Sie müssen 'verwenden [0]' zu Index in einer Sammlung -. Sonst wird es analysiert als eine Funktion der Anwendung zur Liste '[0]'. – kvb

Antwort

3

Wie KVB gesagt in einem Kommentar

a[0] 

bedeutet „behandeln a als eine Funktion auf die einzige Argument angewendet Liste enthält nur Null '“.

Sie wollen

a.[0] 

a den Null Index Element des Arrays zu erhalten.

Sobald Sie das in Ordnung bringen, Typinferenz für die Überladungsauflösung arbeiten und nicht die Besetzung müssen usw.

Verwandte Themen