Стиль F # - предпочтение () или <| - PullRequest
3 голосов
/ 30 сентября 2008

Какой из этих двух вариантов вы чаще всего используете, а какой более "идиоматический"?

  1. f arg (obj.DoStuff ())
  2. ф арг <| obj.DoStuff () </li>

Ответы [ 4 ]

5 голосов
/ 30 сентября 2008

В целом, я не знаю, что одно или другое более идиоматично.

Лично я единственный раз использую <| с "рейзом": </p>

raise <| new FooException("blah")

Кроме того, я всегда использую парены. Обратите внимание, что, поскольку большинство кода F # используют функции с карри, это обычно не подразумевает каких-либо «лишних» паренов:

f arg (g x y)

Когда вы попадаете в функции без карри и конструкторов и так далее, они становятся менее привлекательными:

f arg (g(x,y))

Мы, вероятно, по крайней мере рассмотрим изменение правил языков F #, чтобы приложения с высоким приоритетом связывались еще теснее; прямо сейчас

f g()

разбирает как

f g ()

но многие хотели бы, чтобы оно было проанализировано как

f (g())

(мотивирующий случай в оригинальном вопросе). Если у вас есть твердое мнение по этому поводу, оставьте комментарий к этому ответу.

2 голосов
/ 19 ноября 2008

Поскольку вывод типа работает слева направо, бонусом использования |> является то, что он позволяет F # выводить тип аргумента функции.

В качестве надуманного примера,

[1; 2; 3] |> (fun x -> x.Length*2)

работает просто отлично, но

(fun x -> x.Length*2) [1; 2; 3]

жалуется на "поиск объекта неопределенного типа".

0 голосов
/ 30 сентября 2008

Когда бы ни было возможно, я бы предпочел |>, потому что он читается слева направо.

0 голосов
/ 30 сентября 2008

Я использую () гораздо чаще, но это просто предпочтение, я уверен, что <| более логично, но я использую () по привычке. </p>

...