문제

나는 f#를 배우고있다. 나는 그것을 바라 보는 것으로 시작했다 F# 샘플 Microsoft에서.

나는이 진술을 가로 질러 달렸다.

let line1,line2 = 
    use sr = System.IO.File.OpenText @"test.txt"
    let line1 = sr.ReadLine() 
    let line2 = sr.ReadLine() 
    (line1,line2)

누구 든지이 진술을 나에게 설명 할 수 있습니까?

여기서 어떤 유형이 정의되고 있습니까? 기능? 튜플?

왜 이렇게 line1 그리고 line2 정의 내에서 재정의해야합니다 line1,line2 (let line1 = ... let line2 =)?

최종 라인은 무엇입니까? (line1, line2) 그리고 이것은 원래 정의의 유형과 어떻게 연결됩니까? 이것이 기능이 반환됩니까?

"진술"도 F#의 정의에 사용하기에 적합한 단어일까요?

감사.

도움이 되었습니까?

해결책

F#의 결합 식별자 값에 대한 일반적인 형태는

let pattern = expression

이 경우 무늬 "line1, line2"입니다. 튜플 패턴으로, 그것은 값의 2- 튜플에 바인딩하고 이름 "line1"및 "line2"를이 두 값에 할당 할 것으로 예상됩니다.

그만큼 표현 다음 4 줄입니다. 그 표현 안에는 로컬 변수가 있습니다. 그것들은 또한 "line1"과 "line2"로 지명되었지만 "x"와 "y"또는 그 밖의 이름으로 쉽게 이름을 바꿀 수있었습니다. 해당 식별자의 범위는이 계약 된 표현에 국한됩니다. (외부 범위의 이름으로 동일한 이름이 사용된다는 사실은 컴파일러에 관한 한 영향을 미치지 않습니다.)

표현식이 표현식의 '반환 값'인 경우 마지막 줄. 이 경우 값의 2- 값 "line1"및 "line2"(또는 박람회의 명확성을 위해 이름을 바꾸는 경우 "x"및 "y"의 값을 반환합니다. 또한,이 두 값은 각각 유형 "문자열"을 가지기 때문에 리턴 표현식의 유형은 "String*string"이며, 이는 각 값이 문자열 인 2- 튜플입니다. 이것은 첫 번째 줄의 원래 "line1"및 "line2"이름이 각각 유형 "String"을 갖는 것으로 추론 함을 의미합니다.

F#은 기능적이므로 "모든 것이 표현입니다"와 "진술이 없습니다"(순차적으로 평가되는 표현 시퀀스 만) 그러나 (ab)라는 용어를 사용하여 "ab)을 사용하는 것은 괜찮습니다. 당신이 매우 정확하지 않으면 내면의 "let"라인.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top