다음을 통해 공유


let 바인딩(F#)

바인딩은 값이나 함수에 식별자를 연결합니다.값이나 함수에 이름을 바인딩하려면 let 키워드를 사용합니다.

// Binding a value:
let identifier-or-pattern [: type] =
   expression
body-expression
// Binding a function value:
let identifier parameter-list [: return-type ] =
   expression
body-expression

설명

let 키워드는 하나 이상의 이름에 대해 값 또는 함수 값을 정의하는 바인딩 식에 사용됩니다.가장 단순한 형식의 let 식은 다음과 같이 단순 값에 이름을 바인딩하는 식입니다.

let i = 1

줄 바꿈을 사용하여 식별자로부터 식을 구분하는 경우 다음 코드에서와 같이 식의 각 줄을 들여써야 합니다.

let someVeryLongIdentifier =
    // Note indentation below.
    3 * 4 + 5 * 6

단순한 이름 대신 다음 코드에서와 같이 튜플 등 이름이 포함된 패턴을 지정할 수 있습니다.

let i, j, k = (1, 2, 3)

body-expression은 이름이 사용되는 식입니다.본문 식은 별도의 줄에 표시됩니다. 이 줄은 let 키워드의 첫 글자와 나란히 정렬되도록 들여써야 합니다.

let result =
    let i, j, k = (1, 2, 3)
    // Body expression: 
    i + 2*j + 3*k

let 바인딩은 모듈 수준에서 클래스 형식의 정의에 사용되거나 함수 정의 같은 로컬 범위에 사용될 수 있습니다.모듈이나 클래스 형식의 최상위 수준에 사용되는 let 바인딩에는 본문 식이 없어도 되지만 다른 범위 수준에 사용되는 바인딩에는 본문 식이 필요합니다.바인딩된 이름은 다음 코드에서와 같이 정의 시점 이후에 사용할 수 있지만 이 이름을 사용하기 위해서는 let 바인딩이 먼저 등장해야 합니다.

// Error:
printfn "%d" x  
let x = 100
// OK: 
printfn "%d" x

함수 바인딩

함수 바인딩은 값 바인딩의 규칙을 따르지만 함수 바인딩의 경우 다음 코드에서와 같이 함수 이름 및 매개 변수가 포함된다는 점에서 차이가 있습니다.

let function1 a =
    a + 1

일반적으로 매개 변수는 튜플 패턴 같은 패턴입니다.

let function2 (a, b) = a + b

let 바인딩 식에서는 마지막 식의 값을 구합니다.따라서 다음 코드 예제의 경우 result의 값은 100 * function3 (1, 2)의 계산 결과로 구해집니다. 이 경우 그 결과는 300입니다.

let result =
    let function3 (a, b) = a + b
    100 * function3 (1, 2)

자세한 내용은 함수(F#)를 참조하십시오.

형식 주석

콜론(:) 뒤에 형식 이름을 추가하고 이 전체를 괄호로 묶어 매개 변수의 형식을 지정할 수 있습니다.마지막 매개 변수 뒤에 콜론과 형식을 추가하여 반환 값의 형식을 지정할 수도 있습니다.정수가 매개 변수 형식인 function1의 전체 형식 주석은 다음과 같습니다.

let function1 (a: int) : int = a + 1

명시적 형식 매개 변수가 없으면 형식 유추를 통해 함수 매개 변수의 형식을 결정합니다.여기에는 매개 변수의 형식을 제네릭으로 자동 일반화하는 경우가 포함될 수 있습니다.

자세한 내용은 자동 일반화(F#)형식 유추(F#)를 참조하십시오.

클래스의 let 바인딩

let 바인딩은 클래스 형식에 사용될 수 있지만 구조체 또는 레코드 형식에는 사용될 수 없습니다.클래스 형식에 let 바인딩을 사용하려면 클래스에 기본 생성자가 있어야 합니다.생성자 매개 변수는 클래스 정의의 형식 이름 뒤에 나와야 합니다.클래스 형식의 let 바인딩은 해당 클래스 형식의 전용 필드 및 멤버를 정의합니다. 이 바인딩은 형식의 do 바인딩과 함께 형식의 기본 생성자 코드를 구성합니다.다음 코드 예제에서는 전용 필드 field1과 field2가 있는 MyClass 클래스를 보여 줍니다.

type MyClass(a) =
    let field1 = a
    let field2 = "text"
    do printfn "%d %s" field1 field2
    member this.F input =
        printfn "Field1 %d Field2 %s Input %A" field1 field2 input

field1 및 field2의 범위는 이를 선언한 형식으로 제한됩니다.자세한 내용은 클래스의 let 바인딩(F#)클래스(F#)을 참조하십시오.

let 바인딩의 형식 매개 변수

모듈 수준의 let 바인딩은 형식이나 계산 식에서 명시적 형식 매개 변수를 가질 수 있습니다.함수 정의 내에 있는 경우 등과 같은 식의 let 바인딩은 형식 매개 변수를 가질 수 없습니다.자세한 내용은 제네릭(F#)을 참조하십시오.

let 바인딩에 대한 특성

다음 코드에서와 같이 모듈의 최상위 let 바인딩에 특성을 적용할 수 있습니다.

[<Obsolete>]
let function1 x y = x + y

범위 및 액세스 가능성의 바인딩 수

Let 바인딩은로 선언 된 엔터티 중 하나를 포함 하는 부분에 제한 됩니다 범위 (함수, 모듈, 파일 또는 클래스와 같은) 바인딩을 나타납니다 후.따라서이 let 바인딩은 이름 범위에 도입 인가요.Let 바인딩은 모듈에서 모듈의 공용 함수로 컴파일되지 않으므로 모듈에 액세스할 수 있기만 let 바인딩된 값 이나 함수를 모듈에 모듈의 클라이언트에 액세스할 수 있습니다.반면, let 바인딩은 클래스에서 클래스를 private입니다.

일반적으로 클라이언트 코드에서 사용 하는 경우에 모듈 이름 모듈의 함수를 정규화 해야 합니다.예를 들어 모듈 Module1 는 함수는 function1, 사용자 지정 Module1.function1 함수를 참조 합니다.

모듈의 사용자는 가져오기 선언이 수 있습니다 모듈 이름으로 한정 되지 않고 해당 모듈 내의 함수를 사용 하십시오.앞서 언급 한 예에서 사용자 모듈의 경우 모듈 가져오기 선언 열기를 사용 하 여 열 수 있습니다 Module1 이후에 참조 function1 직접.

module Module1 =
    let function1 x = x + 1.0

module Module2 =
    let function2 x =
        Module1.function1 x

    open Module1
    let function3 x =
        function1 x

일부 모듈 특성이 RequireQualifiedAccess, 즉 공개한 함수는 모듈 이름으로 한정 되어야 합니다.예를 들어, 모듈 F# 목록에는이 특성이 있습니다.

모듈 및 액세스 제어에 대 한 자세한 내용은 모듈(F#)액세스 제어(F#).

참고 항목

참조

함수(F#)

클래스의 let 바인딩(F#)