2009-06-04 3 views

답변

25

당신 만의 readline 기능을 가리키는 대리자를 구축하고

let s = Console.ReadLine 

를 사용하는 경우. 실제로 함수를 실행하려면

let s = Console.ReadLine() 

이 필요합니다. 타입 추론이 컴파일러 경고를받지 않는다는 것을 제외하고 이것은 C# 구문과 같습니다.

+2

예. Console.ReadLine은 "unit -> string"값입니다. the()를 추가하면 인수로 기대하는 'unit'을 전달합니다. – YotaXP

+0

+1 -이 동작은 함수의 다른 인수처럼() 앞에 공백이 있어야 더 명확해질 수 있습니다. –

+2

컴파일러에 경고가 표시됩니다! ** ** ** **을 (를) 사용하면. 당신이'Console.ReadLine() |> ignore'라고 쓰는 것처럼 보입니다. 함수의 출력이 캡처되거나 무시되는지 여부를 확인하지 않는 것은 C#이라고 주장합니다. –

8

"영광을 얻지 못했다"는 것은 무엇을 의미합니까? 여기에 그냥 VS2010b1에 쓴 작은 콘솔 응용 프로그램, 그리고 그것을 잘 작동합니다 :

open System 

let line = Console.ReadLine() 
Console.WriteLine("You wrote {0}", line) 

// Just to make it pause 
let unused = Console.ReadLine() 

당신은 비주얼 스튜디오 내에서 F # 대화에서 코드를 실행하려고합니까? 그렇다면 브라이언 (Brian) 지사의 설명대로 문제가 될 수 있습니다.

그러나 F # Interactive를 명령 줄에서 사용할 때 동일한 문제가 발생하지 않았습니다.

Microsoft F# Interactive, (c) Microsoft Corporation, All Rights Reserved 
F# Version 1.9.6.16, compiling for .NET Framework Version v4.0.20506 

Please send bug reports to [email protected] 
For help type #help;; 

> open System;; 
> let line = Console.ReadLine();; 
Hello world 

val line : string = "Hello world" 

같은 문제를 보이지 않았다 F # 대화에서 브라이언의 루프 코드를 실행 : 다음 세션의 전체 성적이다.

최종 줄 : Visual Studio의 F # Interactive에서는 깨졌지만 명령 줄이나 전체 콘솔 앱에서 대화식으로 실행하면 안되는 것 같습니다.

+0

대화 형 모드에서 사용하고 있지 않습니다. 나는 콘솔 앱을 거의 만들지 않고있다. –

+0

음 ... 이상합니다. VS2010b1이 설치된 버전입니까? –

+0

이상한. 어제 나는 내가 시도한 것에 상관없이 그것을 작동시킬 수 없었다. 이제는 내가 시도한 것에 관계없이 실패 할 수는 없습니다. –

3

저는 베타 1 상자가 없지만 이전에는 대화 형 UI와 백그라운드 프로세스간에 통신하는 백그라운드 명령이 ReadLine()에 표시되는 버그가 있었음을 알고 있습니다. 암호. 강조 표시하고 '대화 형으로 보내기'를 인쇄하면

let Foo max = 
    let rec Loop i = 
     if i < max then 
      let line = System.Console.ReadLine() 
      printfn "line = %s" line 
      Loop (i+1) 
    Loop 1 

Foo 12 

인쇄물을 조사하는 것이 흥미로울 수 있습니다. 아마도 예상치 못한 재미있는 몇 줄의 줄이 보일 것입니다. 그리고 줄을 따라 입력하십시오.

+1

그래, 그게 문제가 될 수있는 것처럼 보입니다. 베타 1에서 처음 시도했을 때 첫 번째 줄은 "line ="입니다. –

+0

차이점은 ReadLine 호출이 끝나면 빈 괄호를 사용하고 있습니다. 아니었다. –

관련 문제