let 바인딩

바인딩식별자를 값 또는 함수와 연결합니다. 키워드(keyword) 사용하여 let 이름을 값이나 함수에 바인딩합니다.

구문

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

설명

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

let i = 1

새 줄을 사용하여 식별자에서 식을 분리하는 경우 다음 코드와 같이 식의 각 줄을 들여쓰기해야 합니다.

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

이름 대신 다음 코드와 같이 이름을 포함하는 패턴(예: 튜플)을 지정할 수 있습니다.

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

본문 식은 이름이 사용되는 식입니다. 본문 식은 키워드(keyword) 첫 번째 문자와 정확히 일치하도록 들여쓰기된 자체 줄에 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)

자세한 내용은 함수를 참조하세요.

형식 주석

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

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

명시적 형식 매개 변수가 없는 경우 형식 유추를 사용하여 함수의 매개 변수 형식을 확인합니다. 여기에는 제네릭이 될 매개 변수 형식을 자동으로 일반화하는 것이 포함될 수 있습니다.

자세한 내용은 자동 일반화형식 유추를 참조하세요.

클래스의 let 바인딩

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

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

범위는 field1field2 선언된 형식으로 제한됩니다. 자세한 내용은 클래스 및 클래스의 바인딩을 참조 let 하세요.

let 바인딩의 형식 매개 변수

let 모듈 수준, 형식 또는 계산 식의 바인딩에는 명시적 형식 매개 변수가 있을 수 있습니다. 식의 let 바인딩(예: 함수 정의 내)은 형식 매개 변수를 가질 수 없습니다. 자세한 내용은 제네릭을 참조하세요.

let Bindings의 특성

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

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

Let 바인딩의 범위 및 접근성

let 바인딩으로 선언된 엔터티의 범위는 바인딩이 나타난 후 포함하는 범위의 부분(예: 함수, 모듈, 파일 또는 클래스)으로 제한됩니다. 따라서 let 바인딩은 범위에 이름을 도입한다고 할 수 있습니다. 모듈의 let 바인딩은 모듈의 공용 함수로 컴파일되므로 모듈의 클라이언트는 모듈에 액세스할 수 있는 한 모듈의 클라이언트에서 렛바운드 값 또는 함수에 액세스할 수 있습니다. 반면 클래스의 바인딩은 클래스에 비공개로 적용됩니다.

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

모듈의 사용자는 가져오기 선언을 사용하여 모듈 이름으로 정규화되지 않고 해당 모듈 내의 함수를 사용할 수 있도록 할 수 있습니다. 방금 멘션 예제에서 모듈 사용자는 이 경우 가져오기 선언 open 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# 목록 모듈에는 이 특성이 있습니다.

모듈 및 액세스 제어에 대한 자세한 내용은 모듈 및 액세스 제어를 참조하세요.

참고 항목