2016-09-03 1 views
7

F 번호에 다음과 같은 성명이가 '하자'다음왜 표현식의 첫 번째 줄을 컴파일하지 않는 것과 같은 줄에 넣는 것입니까?

let listx2 = [1..10] 
    |> List.map(fun x -> x * 2) 
    |> List.iter (fun x -> printf "%d " x) 

블록 끝나지 다음과 같은 오류와 함께 실패합니다. 표현을 기대하십시오.

바인딩의 예기치 않은 중위 연산자. 이 지점 또는 다른 토큰 또는 그 이전에 불완전한 구조화 된 구조가 예상됩니다. 다음은 컴파일 그러나

let listx2 = 
    [1..10] 
    |> List.map(fun x -> x * 2) 
    |> List.iter (fun x -> printf "%d " x) 

나는이 컴파일 것으로 나타났습니다하지만

let listx2 = [1..10] |> 
    List.map(fun x -> x * 2) |> 
    List.iter (fun x -> printf "%d " x) 

이 가능한 잘못된 들여 쓰기 경고가 :이 토큰은 상황의 오프사이드입니다 위치에서 시작을 (10:18). 이 토큰을 더 들여 쓰기하거나 표준 형식화 규칙을 사용하십시오.

처음 두 문장의 차이점은 무엇입니까?

답변

7

당신이 암시 적으로 [와 같은 문자에있을 다음 줄의 들여 쓰기 수준을 설정하는

let listx2 = [1..10] 

이있을 때. 사양의 오프사이드 문자에 대한 다음 규칙에 의해 주어진 것처럼 :

Let 또는 Member 컨텍스트에서 = 토큰이 발견 된 직후.

은 그래서 첫 번째 예에서 |> 미만 [ 이렇게 오류가 발생하는 들여 쓰기,하지만 두 번째에 그들은 그것 때문에 모든 작품 동일합니다.

|>을 줄 끝까지 이동하면 경고 메시지가 표시됩니다.

+0

eol'|>'의 경우 : 연산자로 끝나는 줄은 들여 쓰기에 관계없이 다음 줄에서 암시 적으로 계속됩니다. – Tarmil

관련 문제