почему я могу поставить |> на следующую строку, но <| дает синтаксическую ошибку? - PullRequest
2 голосов
/ 16 мая 2011

Я могу сделать это:

let foo = bar
    |> baz

, но при этом я получаю синтаксическую ошибку:

let foo = bar
    <| baz

почему?

Я также получаю синтаксисошибка, когда я определяю свои собственные инфиксные операторы и пытаюсь использовать их таким образом.

Ответы [ 2 ]

5 голосов
/ 16 мая 2011

Если я что-то не упустил, два оператора (как и любой другой инфиксный оператор) ведут себя одинаково. Когда я определяю bar и baz и использую ваш пример, я получаю ошибку в обоих случаях. Правило офсайта в F # позволяет вам сделать отступ для оператора, расположенного менее далеко от левого, но столбец аргументов должен соответствовать:

let bar = 1
let baz x = x + 1

let foo1 = bar 
        |> baz

let foo2 = baz 
        <| bar

Оба из них дают сообщение об ошибке:

let foo1 = bar 
  |> baz

let foo2 = baz 
  <| bar

(Хотя вы можете увидеть только первую ошибку, потому что компилятор F # прекращает сообщать о дополнительных ошибках после синтаксической ошибки - возможно, потому что он не может гарантировать, что они будут разумными)

Правила довольно хорошо описаны в Рекомендации по форматированию кода в MSDN.

0 голосов
/ 16 мая 2011

Я не уловил ошибку отступа, потому что оба следующих работали:

match r.IsDBNull index  with
| true -> None
| _ -> r.GetValue index
    :?> 'a
    |> Some

let param p =
    db.CreateParameter p
    |> cmd.Parameters.Add
    |> ignore

, хотя я только один раз нажал кнопку табуляции. И все же я однажды нажал на табуляцию, и он не был правильно заполнен:

let foo2 = proc "getfoo2" 
    <| [ "x",Int32,In;
         "y",String(15),In ]

это должен был быть один из двух:

let foo2 = proc "getfoo2" 
         <| [ "x",Int32,In;
              "y",String(15),In ]

let foo2 = 
    proc "getfoo2" 
    <| [ "x",Int32,In;
         "y",String(15),In ]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...