2009-02-13 2 views
33

Я только начинаю изучать F #. В некоторых F # кодирования примеров я вижу ключевое слово «в» используется следующим образом:Значение ключевого слова "in" in F #

let doStuff x = 
    let first, second = x in 
    first + " " + second 

Функция работает с и без «в» в то конец второй линии. Что делает «в»?

ответ

30

in является похмелья от OCaml корней F # 'ы, и он указывает связанные переменные, которые тонко отличаются от переменных областей.

Подумайте об изменении переменной следующим образом; У вас есть выражение:

first + " " + second 

Как она стоит first и second развязаны - они не имеют каких-либо фиксированных значений - так что выражение не имеет конкретного значения в настоящее время. Используя

let (...) in 

синтаксис, который вы определяете, каким образом эти переменные связаны в этом выражении, так что ваш пример будет использовать переменную замену, чтобы уменьшить эту функцию до

let doStuff x = 
    x + " " + x 

В этом примере обе формы идентичны, но представьте себе следующее:

let (x = 2 and y = x + 2) in 
    y + x 

Это не будет работать так же, как

let (x = 2 and y = x + 2) 
    y + x 

Потому что в первом случае x только связан послеin ключевых слов.

В более позднем случае нормальные переменные определяют правила, действующие в режиме, поэтому переменные привязаны, как только они объявлены.

Надеюсь, что это прояснит ситуацию. В общем, вы всегда должны использовать версию безin и указать #light в начале вашего F # источника файлов

+2

Я не думаю, что код в вопросе эквивалентно 'пусть DoStuff х = х +" "+ x'. Я считаю, что это эквивалентно 'let doStuff x = (fst x) +" "+ (snd x)'. Я здесь не прав? – Soldalma

5

Цитирую here.

Если опция синтаксиса подсветки включена опция 'in' не является обязательной. Токен после '=' определения 'let' начинает новый блок, где pre-parser вставляет неявное разделение маркера 'in' между каждой привязкой 'let', которая начинается с того же столбца, что и этот токен ,

Необязательно использовать синтаксис легкой подсветки 'in' . Параметр «in» равен , если используется опция синтаксиса света .

Так что я предполагаю, что вы используете легкий синтаксис.

+0

Да, я использую свет. –

Смежные вопросы