#indent “прочь” в F#

Я только что начал изучать F# и попробовал код от Wiki:

Я предпочитаю вкладки пробелам, таким образом, я изменяю код немного в это:

#indent "off"
open System
open System.Windows.Forms

let form = new Form(Visible=true, TopMost=true, Text="Welcome to F#")

let label =
    let temp = new Label()
    let x = 3 + (4 * 5)
    temp.Text <- sprintf "x = %d" x
    temp

form.Controls.Add(label)

[]
Application.Run(form)

Вывод:

Компилятор Microsoft (R) F# 2.0 создает 4.0.30319.1 Copyright (c) Microsoft Corporation.Все права защищены.

fstest2.fs (1,1): предупреждение FS0062: Эта конструкция для совместимости ML. Conside r использование файла с расширением '.ml' или '.mli' вместо этого. Можно отключить, это предупреждает луг при помощи '-mlcompatibility' или '-nowarn:62'.

fstest2.fs (9,2): ошибка FS0010: Неожиданное ключевое слово 'позволило' или 'использует' в выражении. Ожидаемый 'в' или другой маркер.

fstest2.fs (13,1): ошибка FS0597: Последовательные аргументы должны быть разделены spac es или tupled, и аргументы, включающие функцию или приложения метода, должны быть заключены в скобки

fstest2.fs (9,14): ошибка FS0374: Недопустимое выражение на левом из присвоения

fstest2.fs (16,1): ошибка FS0010: Неожиданный идентификатор в определении

Угадайте, что ошибка находится где-нибудь в блоке меток, которому позволяют, но не могла понять это.

12
задан anta40 30 April 2010 в 15:41
поделиться

2 ответа

Эта тема уже обсуждалась в этом вопросе на StackOverflow. Как объясняет Брайан, отключение "облегченного" синтаксиса означает, что вам придется писать на синтаксисе, совместимом с OCaml.

Я считаю, что в большинстве случаев синтаксис, основанный на отступах, более читабелен (и поэтому стоит перейти от табуляции к пробелам). Однако синтаксис с дополнительными шумами (такими как in и ;;) больше раскрывает структуру языка, поэтому может быть полезно немного поиграть с ним во время изучения F#.

Следующий пример показывает все дополнительные вещи, которые вам нужно написать:

let add a b c =  
  let ab = a + b in // 'in' keyword specifies where binding (value 'ab') is valid 
  printfn "%d" ab;  // ';' is operator for sequencing expressions 
  c - ab;;          // ';;' is end of a function declaration 

Для более подробного обсуждения см. также этот пост.

6
ответ дан 2 December 2019 в 07:02
поделиться

Если вы используете "#indent off" , тогда вы потеряете весь более простой синтаксис с учетом пробелов и вам придется вернуться к использованию, например,

#indent "off"

open System
open System.Windows.Forms

let label =   
    let temp = new Label() in
    let x = 3 + (4 * 5) in   
    temp.Text <- sprintf "x = %d" x;   
    temp;;

let form = 
    let f = new Form() in
    f.Controls.Add(label);
    f;;

[<STAThread>]   
do Application.Run(form)     

с точкой с запятой и в s и все другие виды синтаксического шума повсюду. Вы, вероятно, будете счастливее, если ваш редактор будет преобразовывать вкладки в пробелы (и иметь умный редактор, который может обрабатывать пробелы, как если бы они были вкладками, например, чтобы backspace мог создать резервную копию одной табуляции).

16
ответ дан 2 December 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: