2012-02-18 4 views
2

우선 제가 잘못된 방법으로 오류 메시지를 번역 할 수 있음을 지적하고 싶습니다 ...이 오류는 무엇에 관한 것입니까? 내 코드는 어떻게 작성해야합니까?블록, 'let'이후에 이어지는 것이 완료되지 않았습니다. 문이 필요합니다

[EntryPoint] 
    let Main (args:string[]) = 
      let start = startServer (args.[0]) 
      Console.Read() 

나는 컴파일러를 행복하게하기 위해 어떻게해야하는지 이해하지 못한다. 다음 코드 스 니펫이 정확합니까?

let rec handle = 
     let handler = socket.Accept() 
     let rec recieveData = 
      let bytesRec = handler.Receive(bytes) 
      let data = Encoding.ASCII.GetString(bytes,0,bytesRec) 
      Console.WriteLine("Text received : {0}", data) 
     Console.Read() 
    0 

답변

1

난 당신의 코드가 외부 의존성이 있기 때문에 어떻게해야 무엇 말할 수는 없지만, 최소한 문제는 들여 쓰기가 : F 번호의 공백은 의미가 특히 중요한 역할을한다 렉시 컬 범위 결정. 우선 당신은 또한

[EntryPoint] 
let Main (args:string[]) = 
    let start = startServer (args.[0]) 
    Console.Read() 

let rec handle = 
    let handler = socket.Accept() 
    let rec recieveData = 
     let bytesRec = handler.Receive(bytes) 
     let data = Encoding.ASCII.GetString(bytes,0,bytesRec) 
     Console.WriteLine("Text received : {0}", data) 
    Console.Read() 
    0 

처럼 뭔가를 들여 쓰기를 수정해야합니다 그래서, rec 값의 고용이 잘못없는 경우 불필요한 나타납니다. 그리고 여러분이 handle의 본문에서 많은 작업을 수행하는 것은 이상합니다. 0에 바인드하는 식은 ... handle 또는 recieveData을 함수로 사용합니까? 그렇다면 아마도 더 비슷한 것을 의도 한 것일 수도 있습니다.

let handle socket = //make handle a function with socket an explicit dependency 
    let handler = socket.Accept() 
    let bytesRec = handler.Receive(bytes) 
    let data = Encoding.ASCII.GetString(bytes,0,bytesRec) 
    Console.WriteLine("Text received : {0}", data) 
    Console.Read() |> ignore //probably you are using Read to wait for user interaction to continue, but just ignore the result (returning unit) instead of returning 0 
+0

저는 소켓을 사용하여 서버를 시작하고 있습니다. 귀하의 개선을 주셔서 감사합니다 :) – Sega

1
[<EntryPoint>] 
let Main (args : string[]) = 
    let start = startServer args.[0] 
    Console.Read() 
관련 문제