F# 3.0의 주요 변경 내용

이 항목은 3.0 버전에서 Visual Studio 2012 릴리스의 F# 컴파일러와 언어의 주요 변경 사항에 대해 보여 줍니다.

주요 변경 사항 목록

다음 테이블은 F# 3.0의 주요 변경 사항을 나열합니다.

주요 변경 영역

설명

들여쓰기

이전 버전의 F# 컴파일러에서 실수로 허용되었던 일부 올바르지 않은 들여쓰기는 현재 버전에서 컴파일 오류를 생성합니다.들여쓰기 규칙에 대한 전체 설명은 코드 서식 지정 지침(F#)를 참조하십시오.

인용구와 메서드 및 로컬 변수인 구조의 속성

이제 해당 구조가 로컬 변수일 때 큰따옴표로 된 구조에서 속성 또는 메서드를 호출하는 것은 오류입니다.F#의 이전 버전에서는 이 동작이 허용되지 않았습니다.

[<Struct>]
type S =
   member this.Valid = true
let check () =
    let mutable s = S()
    <@ s.Valid @> // Error

이 요구 사항을 해결하려면 다음 예제처럼 로컬 변수의 복사본을 만듭니다.

let check () =
    let s = S()
    <@ 
        let s = s
        s.Valid 
    @>

잘못된 null 값과 같음

이전 버전에서는 null 값이 형식의 적절한 값 또는 부적절한 값인지 여부에 관계 없이 = 연산자를 사용하여 비교할 수 있습니다.적절한 null은 형식이 허용하는 null 값이며, 부적절한 null은 형식에 유효한 값이 아닙니다.현재 동작은 부적절한 null을 비교하기 위해 = operator 연산자를 사용하려고 시도할 때 다음 코드에서 보여주는 것처럼 NullReferenceException를 throw하는 것입니다.

let a : int ref = Unchecked.defaultof<_>
let main() =
    printfn "%A" (a = a)
main()

주석 및 문자열

이전 버전에서는 3중 따옴표 문자열("""를 사용하는 문자열)에서 닫는 주석 토큰 *)은 문자열의 일부로 구문 분석됩니다..현재 버전에서 해당 토큰을 닫는 주석 문자로 구문 분석합니다.따라서, 이전에 수락한 다음 코드를 현재 버전에서 오류를 생성 합니다.

(* """ *)
Let x = 1

자세한 내용은 문자열(F#)을 참조하십시오.

getter 및 setter 형식이 다른 속성입니다

이전 버전의 F#에서 컴파일러는 getter 및 setter 메서드가 일치하지 않는 형식(예를 들어, int 형식의 getter/string 형식의 setter)을 사용할 수 없었습니다.F# 3.0에서 컴파일러는 이런 선언을 오류로 보고합니다.