Semântica de F # deixe declaração com vírgula
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.
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.