가져오기 선언:
가져오기 선언은 정규화된 이름을 사용하지 않고 참조할 수 있는 요소가 있는 모듈 또는 네임스페이스를 지정합니다.
문법
open module-or-namespace-name
open type type-name
비고
매번 정규화된 네임스페이스 또는 모듈 경로를 사용하여 코드를 참조하면 작성, 읽기 및 유지 관리가 어려운 코드를 만들 수 있습니다. 대신 자주 사용되는 모듈 및 네임스페이스에 키워드를 사용하면 open 해당 모듈 또는 네임스페이스의 멤버를 참조할 때 정규화된 이름 대신 짧은 형식의 이름을 사용할 수 있습니다. 이 키워드는 C#, Visual C++, using namespace Visual Basic의 키워드와 Imports 비슷합니다using.
제공된 모듈 또는 네임스페이스는 동일한 프로젝트 또는 참조된 프로젝트 또는 어셈블리에 있어야 합니다. 그렇지 않은 경우 프로젝트에 대한 참조를 추가하거나 명령줄 옵션(또는 약어-r)을 사용할 -reference 수 있습니다. 자세한 내용은 컴파일러 옵션참조하세요.
가져오기 선언을 사용하면 바깥쪽 네임스페이스, 모듈 또는 파일의 끝까지 선언 뒤에 있는 코드에서 이름을 사용할 수 있습니다.
여러 가져오기 선언을 사용하는 경우 별도의 줄에 표시되어야 합니다.
다음 코드에서는 코드를 간소화하기 위해 키워드를 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 에서는 모듈과 Seq 모듈 모두 List 에 있지만 의미 Seq.emptyempty 합니다.
open List
open Seq
printfn %"{empty}"
따라서 이름이 같은 멤버를 포함하는 모 List 듈이나 Seq 네임스페이스를 열 때는 주의해야 합니다. 대신 정규화된 이름을 사용하는 것이 좋습니다. 코드가 가져오기 선언의 순서에 따라 달라지는 상황을 방지해야 합니다.
형식 선언 열기
F#은 다음과 같은 형식을 지원합니다 open .
open type System.Math
PI
이렇게 하면 형식에 액세스 가능한 모든 정적 필드와 멤버가 노출됩니다.
F#정의 레코드 및 구분된 공용 구조체 형식을 사용하여 정적 멤버를 노출할 수도 open 있습니다. 차별된 노조의 경우 노조 사례를 공개할 수도 있습니다. 이는 다음과 같이 열려지 않을 수 있는 모듈 내부에 선언된 형식의 공용 구조체 사례에 액세스하는 데 유용할 수 있습니다.
module M =
type DU = A | B | C
let someOtherFunction x = x + 1
// Open only the type inside the module
open type M.DU
printfn "%A" A
지정자를 사용하여 global 루트 경로에서만 열기
다음과 같은 중첩된 모듈
module A =
module B =
...
를 통해 열 수 있습니다.
open A // opens A
open B // opens A.B
정규화된 모듈 또는 네임스페이스 만 열려면 지정자가 접두사로 global 추가됩니다.
open global.A // works
open global.B // this now fails
open global.A.B // works
기본적으로 열려 있는 네임스페이스
일부 네임스페이스는 F# 코드에서 자주 사용되므로 명시적 가져오기 선언 없이 암시적으로 열립니다. 다음 표에서는 기본적으로 열려 있는 네임스페이스를 보여 줍니다.
| 네임스페이스 | 설명 |
|---|---|
FSharp.Core |
와 같은 intfloat기본 제공 형식에 대한 기본 F# 형식 정의를 포함합니다. |
FSharp.Core.Operators |
다음과 같은 +*기본 산술 연산을 포함합니다. |
FSharp.Collections |
와 같은 ListArray변경할 수 없는 컬렉션 클래스를 포함합니다. |
FSharp.Control |
지연 계산 및 비동기 식과 같은 컨트롤 구문에 대한 형식을 포함합니다. |
FSharp.Text |
함수와 같은 형식이 지정된 IO에 대한 함수를 printf 포함합니다. |
AutoOpen 특성
어셈블리를 AutoOpen 참조할 때 네임스페이스 또는 모듈을 자동으로 열려면 어셈블리에 특성을 적용할 수 있습니다. 모듈에 AutoOpen 특성을 적용하여 부모 모듈 또는 네임스페이스를 열 때 해당 모듈을 자동으로 열 수도 있습니다. 자세한 내용은 AutoOpenAttribute를 참조하세요.
RequireQualifiedAccess 특성
일부 모듈, 레코드 또는 공용 구조체 형식은 RequireQualifiedAccess 특성을 지정할 수 있습니다. 이러한 모듈, 레코드 또는 공용 구조체의 요소를 참조하는 경우 가져오기 선언을 포함할지 여부에 관계없이 정규화된 이름을 사용해야 합니다. 일반적으로 사용되는 이름을 정의하는 형식에서 이 특성을 전략적으로 사용하는 경우 이름 충돌을 방지하여 라이브러리의 변경 내용에 대한 코드 복원력을 높일 수 있습니다. 자세한 내용은 RequireQualifiedAccessAttribute를 참조하세요.
참고하십시오
.NET