가져오기 선언: open 키워드(F#)
가져오기 선언에서는 정규화된 이름을 사용하지 않고 해당 요소를 참조할 수 있는 모듈이나 네임스페이스를 지정합니다.
open module-or-namespace-name
설명
매번 정규화된 네임스페이스나 모듈 경로를 사용하여 코드를 참조하면 코드를 작성하고, 읽고, 유지 관리하기가 어려울 수 있습니다.자주 사용되는 모듈과 네임스페이스에 대해 open 키워드를 대신 사용하면 해당 모듈이나 네임스페이스의 멤버를 참조할 때 정규화된 이름 대신 짧은 형식의 이름을 사용할 수 있습니다.이 키워드는 C#의 using 키워드, Visual C++의 usingnamespace 및 Visual Basic의 Imports와 비슷합니다.
제공되는 모듈 또는 네임스페이스는 동일한 프로젝트에 있거나 참조 대상인 프로젝트 또는 어셈블리에 있어야 합니다.모듈이나 네임스페이스의 위치가 이와 다르면 프로젝트에 대한 참조를 추가하거나 -reference 명령줄 옵션 또는 그 축약형인 -r 옵션을 사용할 수 있습니다.자세한 내용은 컴파일러 옵션(F#)을 참조하십시오.
가져오기 선언을 사용하면 선언 뒤에 오는 코드에 이름을 사용할 수 있습니다. 이름을 사용할 수 있는 범위는 선언을 포함하는 네임스페이스, 모듈 또는 파일의 끝까지입니다.
여러 개의 가져오기 선언을 사용할 때는 각 선언을 개별 줄에 작성해야 합니다.
다음 코드에서는 open 키워드를 사용하여 코드를 간단하게 만드는 방법을 보여 줍니다.
// Without the import declaration, you must include the full
// path to .NET Framework namespaces such as System.IO.
let writeToFile1 filename (text: string) =
let stream1 = new System.IO.FileStream(filename, System.IO.FileMode.Create)
let writer = new System.IO.StreamWriter(stream1)
writer.WriteLine(text)
// Open a .NET Framework namespace.
open System.IO
// Now you do not have to include the full paths.
let writeToFile2 filename (text: string) =
let stream1 = new FileStream(filename, FileMode.Create)
let writer = new StreamWriter(stream1)
writer.WriteLine(text)
writeToFile2 "file1.txt" "Testing..."
열려 있는 여러 모듈이나 네임스페이스에 동일한 이름이 발견되어 모호성이 발생하더라도 F# 컴파일러에서는 오류나 경고를 발생시키지 않습니다.모호성이 발생하면 F#에서는 더 최근에 열었던 모듈이나 네임스페이스에 참조 우선 순위를 부여합니다.예를 들어 다음 코드에서 empty가 List 및 Seq 모듈에 둘 다 포함되어 있더라도 empty는 Seq.empty를 의미합니다.
open List
open Seq
printfn "%A" empty
따라서 이름이 같은 멤버를 포함하는 List나 Seq 같은 모듈 또는 네임스페이스를 열 때는 주의를 기울여야 합니다. 이 경우 정규화된 이름을 대신 사용하는 것도 좋은 방법이 될 수 있습니다.가져오기 선언의 순서에 코드가 종속되는 상황은 발생하지 않도록 해야 합니다.
기본적으로 열리는 네임스페이스
일부 네임스페이스는 F# 코드에서 매우 자주 사용되므로 명시적 가져오기 선언이 없더라도 암시적으로 열립니다.다음 표에는 기본적으로 열리는 네임스페이스가 나와 있습니다.
Namespace |
설명 |
---|---|
Microsoft.FSharp.Core |
int 및 float 같은 기본 제공 형식에 대한 기본 F# 형식 정의를 포함합니다. |
Microsoft.FSharp.Core.Operators |
+ 및 * 같은 기본 산술 연산을 포함합니다. |
Microsoft.FSharp.Collections |
List 및 Array 같은 변경할 수 없는 컬렉션 클래스를 포함합니다. |
Microsoft.FSharp.Control |
지연 계산 및 비동기 워크플로 같은 제어 구문의 형식을 포함합니다. |
Microsoft.FSharp.Text |
printf 함수 같은 서식 지정된 IO의 함수를 포함합니다. |
AutoOpen 특성
어셈블리에 AutoOpen 특성을 적용하면 어셈블리를 참조할 때 네임스페이스나 모듈이 자동으로 열리게 할 수 있습니다.모듈에 AutoOpen 특성을 적용하여 부모 모듈 또는 네임스페이스를 열 때 해당 모듈이 자동으로 열리게 할 수도 있습니다.자세한 내용은 Core.AutoOpenAttribute 클래스(F#)를 참조하십시오.
RequireQualifiedAccess 속성
일부 모듈, 레코드 또는 union 형식을 RequireQualifiedAccess 특성을 지정할 수 있습니다.이러한 모듈, 레코드 또는 공용 구조체의 요소를 참조 하는 경우는 가져오기 선언이 포함 하는지 여부에 관계 없이 정규화 된 이름을 사용 해야 합니다.이 특성이 전략적를 사용 하면 일반적으로 정의 하는 형식 이름을 사용 하면 이름 충돌을 방지 하 여 코드 력을 라이브러리에서 변경 하는 데 도움이.자세한 내용은 Core.RequireQualifiedAccessAttribute 클래스(F#)를 참조하십시오.