가져오기 선언: open
키워드(keyword)
가져오기 선언은 정규화된 이름을 사용하지 않고 참조할 수 있는 요소가 있는 모듈 또는 네임스페이스를 지정합니다.
구문
open module-or-namespace-name
open type type-name
설명
매번 정규화된 네임스페이스 또는 모듈 경로를 사용하여 코드를 참조하면 쓰기, 읽기 및 기본 어려운 코드를 만들 수 있습니다. 대신 자주 사용하는 모듈 및 네임스페이스에 키워드(keyword) 사용하여 open
해당 모듈 또는 네임스페이스의 멤버를 참조할 때 정규화된 이름 대신 짧은 형식의 이름을 사용할 수 있습니다. 이 키워드(keyword) C#, Visual C++Imports
, using namespace
Visual Basic의 키워드(keyword) 비슷합니다 using
.
제공된 모듈 또는 네임스페이스는 동일한 프로젝트 또는 참조된 프로젝트 또는 어셈블리에 있어야 합니다. 그렇지 않은 경우 프로젝트에 대한 참조를 추가하거나 명령줄 옵션(또는 약어-r
)을 사용할 -reference
수 있습니다. 자세한 내용은 컴파일러 옵션을 참조하세요.
가져오기 선언을 사용하면 바깥쪽 네임스페이스, 모듈 또는 파일의 끝까지 선언 뒤에 있는 코드에서 이름을 사용할 수 있습니다.
여러 가져오기 선언을 사용하는 경우 별도의 줄에 표시되어야 합니다.
다음 코드는 코드를 간소화하기 위해 키워드(keyword) 사용하는 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.empty
empty
합니다.
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
기본적으로 열려 있는 네임스페이스
일부 네임스페이스는 F# 코드에서 자주 사용되므로 명시적 가져오기 선언 없이 암시적으로 열립니다. 다음 표에서는 기본적으로 열려 있는 네임스페이스를 보여 줍니다.
네임스페이스 | 설명 |
---|---|
FSharp.Core |
와 같은 int float 기본 제공 형식에 대한 기본 F# 형식 정의를 포함합니다. |
FSharp.Core.Operators |
다음과 같은 + * 기본 산술 연산을 포함합니다. |
FSharp.Collections |
와 같은 List Array 변경할 수 없는 컬렉션 클래스를 포함합니다. |
FSharp.Control |
지연 계산 및 비동기 식과 같은 컨트롤 구문에 대한 형식을 포함합니다. |
FSharp.Text |
함수와 같은 형식이 지정된 IO에 대한 함수를 printf 포함합니다. |
AutoOpen 특성
어셈블리를 AutoOpen
참조할 때 네임스페이스 또는 모듈을 자동으로 열려면 어셈블리에 특성을 적용할 수 있습니다. 모듈에 AutoOpen
특성을 적용하여 부모 모듈 또는 네임스페이스를 열 때 해당 모듈을 자동으로 열 수도 있습니다. 자세한 내용은 AutoOpenAttribute를 참조 하세요.
RequireQualifiedAccess 특성
일부 모듈, 레코드 또는 공용 구조체 형식은 RequireQualifiedAccess
특성을 지정할 수 있습니다. 이러한 모듈, 레코드 또는 공용 구조체의 요소를 참조하는 경우 가져오기 선언을 포함할지 여부에 관계없이 정규화된 이름을 사용해야 합니다. 일반적으로 사용되는 이름을 정의하는 형식에서 이 특성을 전략적으로 사용하는 경우 이름 충돌을 방지하여 라이브러리의 변경 내용에 대한 코드 복원력을 높일 수 있습니다. 자세한 내용은 RequireQualifiedAccessAttribute를 참조 하세요.
참고 항목
.NET
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기