Почему у F # есть унарный оператор плюс? - PullRequest
12 голосов
/ 03 ноября 2011

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 31 января 2015

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

2 голосов
/ 04 ноября 2011

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

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

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

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

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

2 голосов
/ 03 ноября 2011

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

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

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

...