Вопрос

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

  1. f аргумент (obj.DoStuff())
  2. f arg <| obj.dostuff ()
Это было полезно?

Решение

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

Лично, единственный раз, когда я использую <| с "подъем":

raise <| new FooException("blah")

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

f arg (g x y)

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

f arg (g(x,y))

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

f g()

анализирует как

f g ()

но многие люди хотели бы, чтобы это анализировалось как

f (g())

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

Другие советы

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

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

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

работает нормально, но

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

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

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

По возможности я предпочитаю |>, потому что он читается слева направо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top