Стиль F# - предпочитать () или <|

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

  1. f аргумент (объект DoStuff ())
  2. f arg <| obj.DoStuff ()

+1 потому что я даже не знал <|;)

Dario 19.05.2010 00:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
1
517
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Рейн, я недавно начал разбираться в F#. Вы используете его для коммерческой разработки или просто для развлечения? Меня очень интересуют реальные приложения на F#

aku 30.09.2008 15:31

Прямо сейчас просто для удовольствия, но он очень хорошо подходит для реальных приложений, этот язык прекрасен. Его можно использовать почти так же, как C#, только более элегантный и читаемый код!

Rayne 30.09.2008 15:45

Рейн, согласен. Мне это и вправду нравится. Надеюсь, они скоро получат RTM-версию.

aku 30.09.2008 16:06

Я использую его для автоматизации тестов производительности и написания утилит и скриптов на работе. Надеюсь, он наберет обороты.

Torbjörn Gyllebring 30.09.2008 16:52

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

Ответ принят как подходящий

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

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

raise <| new FooException("blah")

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

f arg (g x y)

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

f arg (g(x,y))

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

f g()

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

f g ()

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

f (g())

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

Прочитав эту и следующие темы на FSHub cs.hubfs.net/forums/thread/3665.aspxcs.hubfs.net/forums/thread/5421.aspx, я подписываю петицию "make f g () parse like f (g ())", как только найду ручку! «Исправление» сделало бы использование фреймворка намного приятнее.

Torbjörn Gyllebring 30.09.2008 17:04

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

Stephen Swensen 22.06.2010 07:13

На самом деле это еще можно изменить; язык различает «приложение» (g x) и «приложение с высоким приоритетом» (g(x) без пробелов между g и open-paren), поэтому f g(x) никогда не компилируется сегодня, независимо от того, принимает ли f 1 или 2 каррированных аргумента (f g (x) передает 2 аргумента в f, а f (g(x)) передает один аргумент в f). Таким образом, возможно, что будущая редакция языка «допустит больше легальных программ» в качестве неразрывного изменения. Но это было бы очень тонко (делая пробелы значимыми для дифференциальных юридических программ), и поэтому маловероятно.

Brian 22.06.2010 09:40

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

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

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

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

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

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

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