Подтвердить что ты не робот

Почему у F # есть унарный плюс оператор?

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

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

К моему удивлению, Haskell не имеет унарного оператора. Поскольку дизайн F # был под влиянием Haskell, мне любопытно, почему было решено, что F # нужен унарный плюс, когда Haskell, по-видимому, этого не сделал.

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

4b9b3361

Ответ 1

Я обобщу расширенные комментарии. Возможные причины (до получения более авторитетного ответа):

  • Согласованность с OCaml, из которого выведен F # (если вы делаете что-то неправильно/ненужно, лучше всего продолжать делать это, чтобы люди знали, чего ожидать: -))
  • Перегрузка (в основном для пользовательских типов)
  • Симметрия с унарным отрицанием

Ответ 2

F # имеет два основных влияния:

  • OCaml, с которым он был первоначально совместим, и
  • CLR, на котором он построен.

Как уже указывалось, OCaml имеет унарный плюс-оператор, поэтому с этой точки зрения для F # естественно также иметь его.

Что касается CLR... К моему удивлению, Common Language Specification не указывает никаких требований к языкам для поддержки перегрузки операторов. Однако при использовании механизма он определяет соглашения о семантике и именовании. Тем не менее, F # было разрешено отказаться от использования унарного плюса, так же как и С#, и VB отказались от поддержки перегрузки операторов составных присвоений (+= и т.д.).

Наиболее распространенные языки .NET, кроме F # (С#, VB и С++/CLI), позволяют это и имеют унарный плюс. Таким образом, с этой точки зрения было бы естественно, что для F # была бы поддержка унарного оператора плюс.

Ответ 3

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

Ответ 4

В соответствии с this" Используется для объявления перегрузки для унарного оператора plus.