Pergunta

Estou aprendendo F #. Comecei por olhar sobre os F # amostras da Microsoft.

Eu corri em toda esta declaração:

let line1,line2 = 
    use sr = System.IO.File.OpenText @"test.txt"
    let line1 = sr.ReadLine() 
    let line2 = sr.ReadLine() 
    (line1,line2)

Alguém pode explicar esta afirmação para mim?

Que tipo está sendo definido aqui? Uma função? Uma tupla?

Por que line1 e line2 têm de ser redefinido dentro da definição de line1,line2 (let line1 = ... let line2 =)?

O que é com a linha final, (line1, line2) e como é que este laço para o tipo da definição original? É este o retorno função?

É "declaração", mesmo a palavra certa para o uso de uma definição em F #?

Graças.

Foi útil?

Solução

A forma geral para a ligao valores dos identificadores em F # é

let pattern = expression

Neste caso, o padrão é "line1, line2", que é uma tuple padrão, ele vai esperar para se ligar a uma 2-tupla de valores e atribuir os nomes "Line1" e "line2" para esses dois valores.

O expressão é os próximos 4 linhas. Dentro dessa expressão existem variáveis ??locais. Elas acontecem também ser chamado "line1" e "line2", mas que poderia facilmente ter sido renomeado "x" e "y" ou qualquer outra coisa - o âmbito desses identificadores é local para esta expressão recuado. (O fato de que os mesmos nomes são usados ??como os nomes no escopo externo não tem efeito tanto quanto o compilador está em causa.)

A linha final se a expressão é o 'valor de retorno' da expressão. Neste caso, ele retorna o 2-tupla de valores "Line1" e "line2" (ou "x" e "y" se você renomeá-los para maior clareza de exposição). Incidentalmente, uma vez que estes dois valores cada um tem tipo "cadeia de caracteres", o tipo de expressão de retorno é "string * cadeia", que é um 2-tuplo em que cada valor é uma cadeia de caracteres. Isso significa que o "Line1" original e nomes "line2" na primeira linha será cada ser inferida a ter tipo "string".

F # é funcional, e assim em um sentido "tudo é uma expressão" e "não há declarações" (apenas seqüências de expressões que são avaliadas sequencialmente), mas é ok IMO de (ab) usam o termo "declaração "para descrever o interior 'deixar' linhas, a menos que você está tentando ser muito preciso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top