Partilhar via


deixar Ligações

Uma associação associa um identificador a um valor ou função. Use a let palavra-chave para vincular um nome a um valor ou função.

Sintaxe

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

Observações

A let palavra-chave é usada em expressões de ligação para definir valores ou valores de função para um ou mais nomes. A forma mais simples da let expressão vincula um nome a um valor simples, da seguinte forma.

let i = 1

Se você separar a expressão do identificador usando uma nova linha, deverá recuar cada linha da expressão, como no código a seguir.

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

Em vez de apenas um nome, um padrão que contém nomes pode ser especificado, por exemplo, uma tupla, como mostrado no código a seguir.

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

O corpo-expressão é a expressão na qual os nomes são usados. A expressão corporal aparece em sua própria linha, recuada para alinhar exatamente com o primeiro caractere na let palavra-chave:

let result =

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

    // Body expression:
    i + 2 * j + 3 * k

Uma let associação pode aparecer no nível do módulo, na definição de um tipo de classe ou em escopos locais, como em uma definição de função. Uma let ligação no nível superior em um módulo ou em um tipo de classe não precisa ter uma expressão de corpo, mas em outros níveis de escopo, a expressão de corpo é necessária. Os nomes vinculados são utilizáveis após o ponto de definição, mas não em nenhum ponto antes da let ligação aparecer, como é ilustrado no código a seguir.

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

Ligações de função

As ligações de função seguem as regras para associações de valor, exceto que as ligações de função incluem o nome da função e os parâmetros, conforme mostrado no código a seguir.

let function1 a = a + 1

Em geral, os parâmetros são padrões, como um padrão de tupla:

let function2 (a, b) = a + b

Uma let expressão de vinculação é avaliada pelo valor da última expressão. Portanto, no exemplo de código a seguir, o valor de é calculado a partir 100 * function3 (1, 2)de result , que avalia como 300.

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

Para obter mais informações, consulte Funções.

Anotações de tipo

Você pode especificar tipos para parâmetros incluindo dois pontos (:) seguidos por um nome de tipo, todos entre parênteses. Você também pode especificar o tipo do valor de retorno anexando os dois pontos e digite após o último parâmetro. As anotações de tipo completo para function1, com inteiros como os tipos de parâmetro, seriam as seguintes.

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

Quando não há parâmetros de tipo explícitos, a inferência de tipo é usada para determinar os tipos de parâmetros de funções. Isso pode incluir a generalização automática do tipo de parâmetro para ser genérico.

Para obter mais informações, consulte Generalização automática e inferência de tipo.

deixar Ligações em Classes

Uma let associação pode aparecer em um tipo de classe, mas não em uma estrutura ou tipo de registro. Para usar uma ligação let em um tipo de classe, a classe deve ter um construtor primário. Os parâmetros do construtor devem aparecer após o nome do tipo na definição de classe. Uma let associação em um tipo de classe define campos privados e membros para esse tipo de classe e, juntamente com do associações no tipo, forma o código para o construtor primário para o tipo. Os exemplos de código a seguir mostram uma classe MyClass com campos field1 privados e 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

Os âmbitos de aplicação e field1field2 estão limitados ao tipo em que são declarados. Para obter mais informações, consulte let Ligações em classes e classes.

Digite parâmetros em let Bindings

Uma let ligação no nível do módulo, em um tipo ou em uma expressão de computação pode ter parâmetros de tipo explícitos. Uma associação let em uma expressão, como dentro de uma definição de função, não pode ter parâmetros de tipo. Para obter mais informações, consulte Genéricos.

Atributos em ligações de permissão

Os atributos podem ser aplicados a associações de nível let superior em um módulo, conforme mostrado no código a seguir.

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

Âmbito e Acessibilidade das Ligações de Arrendamento

O escopo de uma entidade declarada com uma associação let é limitado à parte do escopo que contém (como uma função, módulo, arquivo ou classe) depois que a associação aparece. Portanto, pode-se dizer que uma vinculação let introduz um nome em um escopo. Em um módulo, um valor ou função let-bound é acessível aos clientes de um módulo, desde que o módulo seja acessível, uma vez que as ligações let em um módulo são compiladas em funções públicas do módulo. Por outro lado, as associações de permissão em uma classe são privadas para a classe.

Normalmente, as funções em módulos devem ser qualificadas pelo nome do módulo quando usado pelo código do cliente. Por exemplo, se um módulo Module1 tiver uma função function1, os usuários especificarão Module1.function1 para se referir à função.

Os utilizadores de um módulo podem utilizar uma declaração de importação para disponibilizar as funções desse módulo para utilização sem serem qualificados pelo nome do módulo. No exemplo que acabamos de mencionar, os utilizadores do módulo podem, nesse caso, abrir o módulo utilizando a declaração open Module1 de importação e, posteriormente, referir-se diretamente function1 .

module Module1 =
    let function1 x = x + 1.0

module Module2 =
    let function2 x =
        Module1.function1 x

open Module1

let function3 x =
    function1 x

Alguns módulos têm o atributo RequireQualifiedAccess, o que significa que as funções que eles expõem devem ser qualificadas com o nome do módulo. Por exemplo, o módulo Lista de F# tem esse atributo.

Para obter mais informações sobre módulos e controle de acesso, consulte Módulos e controle de acesso.

Consulte também