Семантика выражения F # let с запятой - PullRequest
4 голосов
/ 13 мая 2009

Я учу F #. Я начал с просмотра F # образцов от Microsoft.

Я наткнулся на это утверждение:

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

Может кто-нибудь объяснить мне это утверждение?

Какой тип здесь определяется? Функция? Кортеж?

Почему line1 и line2 должны быть переопределены в определении line1,line2 (let line1 = ... let line2 =)?

Что с последней строкой, (line1, line2) и как это связано с типом исходного определения? Это функция возврата?

Является ли "оператор" даже правильным словом для определения в F #?

Спасибо.

1 Ответ

13 голосов
/ 13 мая 2009

Общая форма для привязки значений идентификатора в F #:

let pattern = expression

В этом случае шаблон представляет собой "line1, line2", который является шаблоном tuple , он будет ожидать связывания с 2-мя кортежами значений и присвоения имен "line1" и "line2" для этих двух значений.

Выражение - это следующие 4 строки. Внутри этого выражения есть локальные переменные. Их также называют "line1" и "line2", но их легко можно было бы переименовать в "x" и "y" или что-то еще - область действия этих идентификаторов является локальной для этого выражения с отступом. (Тот факт, что одни и те же имена используются в качестве имен во внешней области видимости, не имеет никакого эффекта в том, что касается компилятора.)

Последняя строка, если выражение является «возвращаемым значением» выражения. В этом случае он возвращает два набора значений «line1» и «line2» (или «x» и «y», если вы переименуете их для ясности изложения). Кстати, поскольку каждое из этих двух значений имеет тип «string», тип возвращаемого выражения - «string * string», который представляет собой 2-кортеж, где каждое значение является строкой. Это означает, что исходные имена «line1» и «line2» в первой строке будут выводиться с типом «string».

F # является функциональным, и поэтому в некотором смысле «все является выражением» и «нет выражений» (только последовательности выражений, которые последовательно оцениваются), но вполне нормально, что (ab) использовать термин «выражение» «описать внутренние линии« пусть », если вы не пытаетесь быть очень точными.

...