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 # источника файлов
Я не думаю, что код в вопросе эквивалентно 'пусть DoStuff х = х +" "+ x'. Я считаю, что это эквивалентно 'let doStuff x = (fst x) +" "+ (snd x)'. Я здесь не прав? – Soldalma