Вопрос

Я изучаю F#.Я начал с просмотра Образцы F# от Майкрософт.

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

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 #?

Спасибо.

Это было полезно?

Решение

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

let pattern = expression

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top