가져오기 선언: 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.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

기본적으로 열려 있는 네임스페이스

일부 네임스페이스는 F# 코드에서 자주 사용되므로 명시적 가져오기 선언 없이 암시적으로 열립니다. 다음 표에서는 기본적으로 열려 있는 네임스페이스를 보여 줍니다.

네임스페이스 설명
FSharp.Core 와 같은 intfloat기본 제공 형식에 대한 기본 F# 형식 정의를 포함합니다.
FSharp.Core.Operators 다음과 같은 +*기본 산술 연산을 포함합니다.
FSharp.Collections 와 같은 ListArray변경할 수 없는 컬렉션 클래스를 포함합니다.
FSharp.Control 지연 계산 및 비동기 식과 같은 컨트롤 구문에 대한 형식을 포함합니다.
FSharp.Text 함수와 같은 형식이 지정된 IO에 대한 함수를 printf 포함합니다.

AutoOpen 특성

어셈블리를 AutoOpen 참조할 때 네임스페이스 또는 모듈을 자동으로 열려면 어셈블리에 특성을 적용할 수 있습니다. 모듈에 AutoOpen 특성을 적용하여 부모 모듈 또는 네임스페이스를 열 때 해당 모듈을 자동으로 열 수도 있습니다. 자세한 내용은 AutoOpenAttribute를 참조 하세요.

RequireQualifiedAccess 특성

일부 모듈, 레코드 또는 공용 구조체 형식은 RequireQualifiedAccess 특성을 지정할 수 있습니다. 이러한 모듈, 레코드 또는 공용 구조체의 요소를 참조하는 경우 가져오기 선언을 포함할지 여부에 관계없이 정규화된 이름을 사용해야 합니다. 일반적으로 사용되는 이름을 정의하는 형식에서 이 특성을 전략적으로 사용하는 경우 이름 충돌을 방지하여 라이브러리의 변경 내용에 대한 코드 복원력을 높일 수 있습니다. 자세한 내용은 RequireQualifiedAccessAttribute를 참조 하세요.

참고 항목